如何仅在jQuery中断开当前事件?

时间:2018-05-29 19:40:07

标签: javascript jquery

我有以下事件:

$(document).on('scroll', function() { 
    // do stuff
});

在此活动结束时,我想断开连接。我可以$(document).off('scroll');,但这会断开页面上所有scroll个事件(有几个)。

如何断开这一事件?

5 个答案:

答案 0 :(得分:1)

为了使用off()删除特定处理程序,您需要传递对处理程序的引用,因此只需声明处理程序函数并将引用传递给on()和{{1 }}:

off()
  

.off()方法删除使用.on()附加的事件处理程序。有关详细信息,请参阅该页面上委托和直接绑定事件的讨论。不带参数调用.off()会删除附加到元素的所有处理程序。通过提供事件名称,命名空间,选择器或处理函数名称的组合,可以删除元素上的特定事件处理程序。

http://api.jquery.com/off/

答案 1 :(得分:1)

  

如何断开这一事件?

.namespacing it!

$(document).on({
    "scroll.myNamespace" : function() { 
         // do stuff
    }
});

比某些时候你可以

$(document).off("scroll.myNamespace");

或所有命名空间事件(如果您有更多这些事件,例如:scroll.myNamespaceclick.myNamespace等等。)

$(document).off(".myNamespace");

示例:如何关闭命名空间事件

$(document).on({
  "scroll.teapot": function() {
    console.log("TEAPOT!")
  },
  scroll: function() {
    console.log("scroll")
  }
});

$("#offTeapot").on({
  click: function() {
    $(document).off(".teapot"); // off every ".teapot" namespaced event
  }
})
body {
  height: 400vh;
}

button {
  position: fixed;
  top: 0;
   left: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button id="offTeapot">OFF TEAPOTS</button>

<h1>SCROLL!!!!!</h1>

答案 2 :(得分:0)

您是否尝试过具体设置?

$(document).on('scroll', '#yourId', function(){

}).off('scroll', '#yourId', function(){

});

答案 3 :(得分:0)

您可以将回叫分开并将其置于自己的功能中,然后您可以将其删除。

function doScroll(){
  // Do stuff
}

// Add the function
$(document).on('scroll', doScroll);

// Remove the function
$(document).off('scroll', doScroll);

答案 4 :(得分:0)

如何为一次性使用设置全局标志:

var doThis = true;

$(document).on('scroll', function() { 
    if(doThis){
        // do stuff
        doThis = false;
    }
});