如何使用Jquery阻止特定子进行事件绑定?

时间:2017-02-17 09:29:36

标签: javascript jquery html css

我将滚动事件绑定到我的所有html元素。获取我使用以下过滤器的所有元素

var element = $(myelemt).parentsUntil("html").add($(window));
return  element

这里的元素将返回body,window和所有父htmls标签。

对于这个html元素,我绑定了以下代码的事件:

element.on("scroll", function (e) {
$("#mywrapper3").html($("#mywrapper3").html() + "scrolling<br>");
}

这里我想阻止特定的子div元素绑定。我怎么能做到这一点? 例如,在我的页面中有一个div元素(样本中包含mywrapper id的元素)我不想绑定这个滚动事件。

另外,我必须像第一个代码一样过滤元素。那么如何实现这一点而不是使用停止传播。有没有办法做到这一点。

我准备了一个jsfiddle。请获取以下链接 https://jsfiddle.net/khkcjb6o/ 谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

.off()方法就是您所需要的。最初我开始使用iframe解决方案回答并稍后提出了更好的解决方案。 由于iframe的上下文与其父级不同,因此如果您在父页面上注册所有内容,则不会包含它。

  1. PLUNKER中,第一部分的iframe为srcdoc且内容为。{3}}。滚动iframe,你会发现它没有触发滚动计数器。
  2. 与具有普通iframe的第二部分相同。
  3. 第三和第四部分有滚动内容。
  4. 正如预期的那样,都会触发滚动事件。
  5. 点击使用.off()方法的 IV OFF 按钮。
  6. 现在滚动第IV部分,注意滚动计数器没有增加。
  7. .off()就是您所需要的。请务必使用以下表达式:

    $('*').on('scroll', function() {....
    

    *会在页面上注册除iframe内容之外的所有内容,因此您无需编写问题中的所有代码。

答案 1 :(得分:0)

您可以使用:not() CSS选择器

var element = $(myelemt + ':not(#mywrapper3)').parentsUntil("html").add($(window));    
element.on("scroll", function (e) {
 $("#mywrapper3").html($("#mywrapper3").html() + "scrolling<br>");
}