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),则事件将发生在前缘而不是终点


查看中的/方法。如果你愿意把它用作图书馆,那正是你所需要的。否则,您可以只看源代码并复制所需的方法。谢谢,适合我