我正在尝试检测目标元素是作为对象引用的子元素还是相同元素。
我正在使用以下逻辑:
$("html").on("mousewheel.scroll DOMMouseScroll.scroll",function(e){
e.preventDefault();
var $scrollableElement = $(".foo").eq(0);
var $target = $(e.target);
if ($target == $scrollableElement
|| $target.parents($scrollableElement).length) {
alert("scroll");
}
});
但是,即使在既不是也不.foo
是的子元素的元素上滚动时,也会发出“滚动”警报.foo
。
在我的JsFiddle示例中,在.bar
元素上滚动,并仍然警告“ scroll”:
为什么是这样?是否可以将jQuery对象引用用作的选择器.parents()
?
尝试使用.closest()而不是.parents()
$(function () {
var $scrollableElement = $(".foo").eq(0);
$("html").on("mousewheel.scroll DOMMouseScroll.scroll", function (e) {
e.preventDefault();
var $target = $(e.target);
if ($target.closest($scrollableElement).length) {
console.log("scroll");
}
});
});
演示:小提琴
如果您看看.parents()的语法,那么它不会将jQuery对象作为参数。唯一允许的语法是.parents( [selector ] )
正如@ A.Wolff问为什么不绑定的事件.foo
,而不是
演示:小提琴
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句