Javascript 修改复选框change()事件以等待其他操作
我有一个很大的复选框列表,当您选中/取消选中一个复选框时,所有复选框都会执行一个操作:Javascript 修改复选框change()事件以等待其他操作,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我有一个很大的复选框列表,当您选中/取消选中一个复选框时,所有复选框都会执行一个操作: $("input[type='checkbox']").change(function () { DoSomething(); }); DoSomething()方法实际上相当繁重。我遇到了一个问题,如果有人在短时间内开始单击多个复选框,就会导致每次调用该方法 我想限制这一点,这样如果用户在一两秒钟内单击其中几个复选框,它将只调用DoSomething()一次 在我调用DoSomething()之前
$("input[type='checkbox']").change(function () {
DoSomething();
});
DoSomething()
方法实际上相当繁重。我遇到了一个问题,如果有人在短时间内开始单击多个复选框,就会导致每次调用该方法
我想限制这一点,这样如果用户在一两秒钟内单击其中几个复选框,它将只调用DoSomething()
一次
在我调用
DoSomething()
之前,是否有方法等待几秒钟直到用户完成复选框的检查?您可以在运行DoSomething()
时禁用输入:
$("input[type='checkbox']").change(function () {
$(this).prop('disabled', true);
DoSomething();
$(this).prop('disabled', false);
});
将我的评论移至答案
查看中的/方法。如果你愿意把它用作图书馆,那正是你所需要的。否则,您可以查看源代码并复制所需的方法
以下示例将在执行函数之前等待一秒钟,因为选中了最后一个复选框:
var-debouncedFunction=u.debounce(函数(){
console.log('Debounced');
}, 1000);
$(“输入[type='checkbox']”)。更改(取消BouncedFunction)代码>
使用以下代码:
var定时器;
$(“输入[type='checkbox']”)。更改(函数(){
清除超时(计时器);
计时器=设置超时(函数(){
MyFunction();
}, 1000);
});
函数MyFunction(){
控制台日志(“超时”);
}
如果您不想使用,您可以创建自己的去盎司功能,如下所示:
function debounce(func, wait, immediate) {
var timeout;
console.log('onfunct');
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
然后像这样称呼它
$("input[type='checkbox']").change(
debounce(function(ev) {
alert('Do something here');
}, 1000, 0)
);
在选中复选框后有效等待1秒。如果immediate
标志设置为1(或true),则事件将发生在前缘而不是终点
查看中的/方法。如果你愿意把它用作图书馆,那正是你所需要的。否则,您可以只看源代码并复制所需的方法。谢谢,适合我