我有以下事件:
$(document).on('scroll', function() {
// do stuff
});
在此活动结束时,我想断开连接。我可以$(document).off('scroll');
,但这会断开页面上所有scroll
个事件(有几个)。
如何断开这一事件?
答案 0 :(得分:1)
为了使用off()
删除特定处理程序,您需要传递对处理程序的引用,因此只需声明处理程序函数并将引用传递给on()
和{{1 }}:
off()
.off()方法删除使用.on()附加的事件处理程序。有关详细信息,请参阅该页面上委托和直接绑定事件的讨论。不带参数调用.off()会删除附加到元素的所有处理程序。通过提供事件名称,命名空间,选择器或处理函数名称的组合,可以删除元素上的特定事件处理程序。
答案 1 :(得分:1)
如何断开这一事件?
.namespacing it!
$(document).on({
"scroll.myNamespace" : function() {
// do stuff
}
});
比某些时候你可以
$(document).off("scroll.myNamespace");
或所有命名空间事件(如果您有更多这些事件,例如:scroll.myNamespace
,click.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;
}
});