我试图检测目标元素是子元素还是同一元素,我作为对象引用。
我使用以下逻辑:
$("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
元素,"滚动"仍然警告:
这是为什么?是否可以使用jQuery对象引用作为.parents()
的选择器?
答案 0 :(得分:6)
尝试使用.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");
}
});
});
演示:Fiddle
如果您查看.parents()的语法,则不会将jQuery对象作为参数。唯一允许的语法是.parents( [selector ] )
As @ A.Wolff问为什么不将事件绑定到.foo
演示:Fiddle