如何避免.click()每次使用时都会添加新的监听器
我有一些函数会将事件监听器(.click(...))添加到某些元素(以及许多其他任务中)。如何避免.click()每次使用时都会添加新的监听器
我需要多次调用此函数(例如在窗口调整大小)。 每次我调用这个函数时,监听器都会再次被添加 - 所以如果我3次调用我的函数,每次点击都会触发3次而不是一次。
我建一个simplyfied例如: https://plnkr.co/edit/5NmIruVoAknfcrRTBSYb
var clickMe = $("#clickme");
function init() {
setTimeout(function() {
clickMe.click(function() {
$("#output").append(".");
})
}, 100)
}
init();
$("#recall").click(function() {
init();
});
当然这个样本(和setTimeout的)没有任何意义,但它反映了我的代码块最好的。 是否有可能以一种方式关闭整个init函数,如果我调用它,一切都会重置?或者每次都必须使用unbind()删除事件?
我看看你的代码,我觉得这是一个修复
如果删除单击事件
.off("click")
,那么你可以将其添加回再次,这将始终如果将其删除它在添加之前存在。
.off("click").on("click", function() {
以下是改变的JavaScript
$(document).ready(function() {
init();
var clickMe = $("#clickme");
function init() {
setTimeout(function() {
clickMe.off("click").on("click", function() {
$("#output").append(".");
})
}, 100)
}
$("#recall").click(function() {
init();
});
})
好的,谢谢 - 这个作品。但仍然有点哈克。 – Gerfried
是的,它是一个黑客,如果我发现一个更干净的方式,我会更新我的答案:) –
也许这可以帮助你。插入' clickMe.unbind(“click”);'在'clickMe.click(function()'之前'像这样https://plnkr.co/edit/iFAEantGoMyIhkYJMKwj?p=preview –
如果你在版本中使用'Jquery'大于1.7,最好使用'on'' off'而不是'unbind' – Mark
这个工作,Carsten,但我希望有一个更优雅的解决方案,因为我有很多元素/处理程序。 – Gerfried