【发布时间】:2013-12-15 09:38:12
【问题描述】:
有一个按钮,当用户点击按钮时,一些数据会保存到后端。问题是当用户快速点击按钮时,事件处理程序会被多次执行。
这是代码
var x = 1;
$('#button').click(function() {
// Do something
// Save some data on network
x++;
console.log(x);
});
我希望当用户单击按钮一次时执行此处理程序。即使在双击或三次单击的情况下,也应该只执行一次。我只是想避免快速点击,这个处理程序当然可以再次执行
我有多种解决方案,比如
-
定义一个像
IS_BUTTON_HANDLER_WORKING = false这样的全局变量,当你进入处理程序时将其设置为true,最后再次设置为false。并检查是否为真,只需从函数返回。 -
在开始时分离处理程序并在最后重新附加。
假设您的应用程序中有 25 个按钮。实现这一点的最佳方法应该是什么。
看看这个Fiddle
解决方案
$('#button').click(function() {
$(this).attr('disabled', true);
// Do something
// Save some data on network
$(this).removeAttr('disabled');
});
使用它,我们可以确定只有在之前的执行完全完成后,我们的下一个处理程序才会执行。
【问题讨论】:
-
尝试使用
one('click', fn)而不是click -
我不认为
one是正确的答案,因为处理程序不会再次被执行。您可能想在一段时间后再次提交包含更新数据的表单。
标签: javascript jquery event-handling