为什么我的.on()在一次点击中被调用了好几次?
Why does my .on() get called several times on one click
我试图做一个简单的脚本,从DOM删除复选框时,他们被点击。我必须把它放在循环中因为我要以设定的间隔轮询一些数据。这会导致这个脚本出现一些奇怪的问题:
JsFiddle
HTML:<label class="delete">
<input type="checkbox" checked="" id="checkdelete" name="261">
</label>
<label class="delete">
<input type="checkbox" checked="" id="checkdelete" name="261">
</label>
<label class="delete">
<input type="checkbox" checked="" id="checkdelete" name="261">
</label>
Javascript: var queueInterval = setInterval(function() {
$('input#checkdelete').on('change', function(){
console.log($(this).attr('name'));
$(this).parent('.delete').remove();
});
}, 1000);
如您所见,如果您单击一个复选框,它将向控制台输出看似随机数量的调用。这很糟糕,因为我实际上是在点击复选框后做一个。post(),每次点击它都会被调用很多次。
当它在循环之外时,没有问题。如果我给每个复选框一个唯一的ID它不会像这样,但所有的复选框都不起作用。
有什么帮助吗?
这里的问题是,您在setInterval()
循环中添加一个更改处理程序,它将每秒向所有现有的复选框添加一个新的更改处理程序。因此,它将绑定多个更改处理程序到复选框,因此当复选框状态更改时,每个处理程序都将被调用。
var queueInterval = setInterval(function () {
//do what ever else you want to do here
}, 1000);
//use checkdelete as a class not as an id because ID of an element must be unique
$(document).on('change', '.checkdelete', function () {
console.log($(this).attr('name'));
$(this).parent('.delete').remove();
});
演示:小提琴
每秒钟你将应用相同的事件处理程序所有复选框在屏幕上,所以每秒钟你将应用一些事件处理程序基于屏幕上的复选框。此外,更不用说,使用#id选择器应该是唯一的。对于在页面上多次出现的项使用类处理程序。
查看这里的代码:http://jsfiddle.net/notsoluckycharm/ZWXjk/1/
它更清晰地分离了你的关注点。您还可以使用一个容器来附加标签/复选框,并且该容器将处理事件委托。
$('div').on('change', 'input', function(){
$(this).parent('.delete').remove();
});
var queueInterval = setInterval(function() {
$(".container").append('<label class="delete"> '
<input type="checkbox" checked="" id="checkdelete" name="261">'
</label>');
}, 1000);
正如人们在评论中所说,您应该只有一个具有相同ID的元素。如果您将ID更改为类,这是更好的样式。它持续发送输入的原因是setInterval()。它发送的次数是你点击之间的秒数。我修改了你的小提琴,你可以在这里看到结果:http://jsfiddle.net/ZWXjk/2/
$('input.checkdelete').on('change', function(){
console.log($(this).attr('name'));
$(this).parent('.delete').remove();
});
相关文章:
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- Meteor Router数据函数被调用两次
- Backbone.js ListenToOnce被调用两次
- VirtualScroll rowRenderer方法在滚动时被调用多次
- Angular 1.5变量在调用一次之前不起作用
- 为什么DTM数据元素被调用两次
- 模态中的数据关闭在单击时被调用两次
- 如何每 10 秒调用一次 JS 函数,然后以角度激活一个函数
- Javascript 计时器只调用一次 Code 隐藏方法
- java-script 函数被调用两次
- 如何在 JS 中调用 2 次或更多次时延迟函数执行
- 一段时间后调用函数,但只调用一次
- 每隔1秒调用一次jQueryajax是否安全
- 什么时候函数只能调用一次
- WebView加载URL(“javascript:XYZ”)在我的网络视图中执行了好几次
- 如何在重复满足条件时调用一次辅助函数
- JS:.apply(null,arguments)——为什么我的函数被调用一次,而console.log被调用多次
- Angular指令删除只调用一次的DOM元素
- 为什么我的.on()在一次点击中被调用了好几次?