Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 防止从引导模式重复ajax调用?_Jquery_Ajax_Twitter Bootstrap - Fatal编程技术网

Jquery 防止从引导模式重复ajax调用?

Jquery 防止从引导模式重复ajax调用?,jquery,ajax,twitter-bootstrap,Jquery,Ajax,Twitter Bootstrap,在引导模式中,当用户按下Enter键时,会触发ajax调用 $('#amount').keypress(function(event){ if(event.which==13) { $( "#final" ).trigger( "click" ); // this triggers the ajax call } }); 但是,如果用户长时间按enter键不小心会导致提交过多,因此会在数据库中输入不需要的记录。如何阻止这种意外行为?在这种情况下有什么最佳实践吗

在引导模式中,当用户按下Enter键时,会触发ajax调用

$('#amount').keypress(function(event){
    if(event.which==13) {
        $( "#final" ).trigger( "click" ); // this triggers the ajax call
    }

});

但是,如果用户长时间按enter键不小心会导致提交过多,因此会在数据库中输入不需要的记录。如何阻止这种意外行为?在这种情况下有什么最佳实践吗?

我不知道这是否是最佳实践,但我会这样做

window.alreadySubmit = false;
$('#amount').keypress(function(event){
    if(event.which==13 && !alreadySubmit) {
        window.alreadySubmit = true;
        $( "#final" ).trigger( "click" ); // this triggers the ajax call
    }

});
然后在ajax成功回调中,将
windowd.alreadySubmit
变量重置为
false

通常,您可以设置一个超时,如下所示:

var myTimeout = 3000; //ms = 3 seconds
window.alreadySubmit = false;

$('#amount').keypress(function(event){
    if(event.which==13 && !alreadySubmit) {
        window.alreadySubmit = true;
        $( "#final" ).trigger( "click" ); // this triggers the ajax call
        setTimeout(function(){ window.alreadySubmit = false; }, myTimeout);
    }

});

你的解决方案有效。但如果我想在某个时间后再次使用此事件,该怎么办?您可能的建议是添加
window.alreadySubmit=false执行ajax调用后。我试过了,但问题仍然存在。如果我长按Enter键,仍然会输入一条重复的记录。@RameshPareek好吧,这段代码会在上一次调用完成后启用submit,因此如果ajax调用快速执行,您会注意到重复的记录。为了避免这种情况,请检查我的最新答案,这就成功了!将其设置为1000ms就足够了。如果你认为这会有助于未来的访问者,请考虑一下这个问题。