【问题标题】:prevent duplicate ajax calls from bootstrap modal?防止来自引导模式的重复 ajax 调用?
【发布时间】:2016-05-18 00:14:13
【问题描述】:

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

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

});

但是如果用户不小心长时间按下回车键,则会提交过多的内容,从而将不需要的记录输入到数据库中。如何阻止这种意外行为?在这种情况下是否有任何最佳做法?

【问题讨论】:

    标签: jquery ajax twitter-bootstrap


    【解决方案1】:

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

    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);
        }
    
    });
    

    【讨论】:

    • 您的解决方案有效。但是如果我想在一段时间后再次使用这个事件怎么办?您可能的建议是在我的 ajax 调用执行后添加 window.alreadySubmit = false;。我试过这个,但问题仍然存在。如果我长按 Enter 键,仍然会输入重复的记录。
    • @RameshPareek 好吧,该代码在上一次调用完成后启用提交,因此如果快速执行 ajax 调用,您会注意到重复的记录。为避免这种情况,请检查我更新的答案
    • 成功了!将其设置为 1000 毫秒就足够了。如果您认为该问题对未来的访问者有帮助,请考虑提出问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2016-10-14
    • 2017-11-24
    • 2019-09-12
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多