在复选框更改延迟上提交表单

时间:2018-01-28 07:05:11

标签: javascript jquery html

目标:我有一个表单,其中包含我想在其.change()事件中提交的复选框。我希望在提交之前有一个延迟,每次点击另一个复选框时都会重置。

代码:

$('input[type="checkbox"]').change(function(){
    setTimeout(function(){
      $('#nav_form').submit();
    },750);
});

此代码有效,但过早提交表单。如果我将毫秒设置为更高的值(如几秒钟),如果用户选择了许多复选框,但是当他们只选择1或2时,它会很有效,延迟非常明显。

提前感谢所有帮助!

1 个答案:

答案 0 :(得分:1)

您需要清除setTimeout - 它与“debouncing”文本条目相当,例如Ajax控制的自动完成。

var tId;
$('input[type="checkbox"]').change(function(){
    clearTimeout(tId);
    tId=setTimeout(function(){
      $('#nav_form').submit();
    },750);
});

如果您只想提交复选框,则可能需要添加测试:

var tId;
$('input[type="checkbox"]').change(function(){
    clearTimeout(tId);
    if (('input[type="checkbox"]:checked').length>0){
      tId=setTimeout(function(){
        $('#nav_form').submit();
      },750);
    }
});