目标:我有一个表单,其中包含我想在其.change()事件中提交的复选框。我希望在提交之前有一个延迟,每次点击另一个复选框时都会重置。
代码:
$('input[type="checkbox"]').change(function(){
setTimeout(function(){
$('#nav_form').submit();
},750);
});
此代码有效,但过早提交表单。如果我将毫秒设置为更高的值(如几秒钟),如果用户选择了许多复选框,但是当他们只选择1或2时,它会很有效,延迟非常明显。
提前感谢所有帮助!
答案 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);
}
});