点击jQuery绑定的复选框时发往insert.php的POST请求成倍增加如何解决
问题原因
- 事件绑定重复嵌套:你将
input:checkbox的change事件监听器绑定逻辑,放在了#submiter的click事件回调内部。每点击一次复选框,就会给所有复选框额外新增一次change事件绑定,旧的绑定不会自动清除,点击N次就绑定了N个事件监听器,触发change时就会同时执行N次AJAX请求,自然按2的幂次增长。 - 逻辑冗余:你绑定的
click和change都是作用在同一个复选框上的,两个事件本身就会在点击复选框时先后触发,完全没必要嵌套绑定。
修复方案
直接把change事件的绑定逻辑从click回调里挪出来,放在$(document).ready下直接执行即可,修复后的JS代码如下:
$(document).ready(function() { $("input:checkbox").change(function() { if ($(this).is(":checked")) { console.log('checked ' + $(this).val()); $.ajax({ url: "insert.php", method: "POST", data: { test1: $(this).val() }, success: function(data) { $('#result').html(data); } }); } }); });
如果业务场景确实需要在某些操作后才绑定事件,可以在绑定前先调用off清除之前的绑定,避免重复:
// 仅在确实需要动态绑定的场景使用 $("input:checkbox").off('change').change(function() { // 回调逻辑 });
内容的提问来源于stack exchange,提问作者swissrockie
相关产品推荐
相关产品推荐

