【问题标题】:Can I preventDefault(); inside of an ajax callback?我可以防止Default();在ajax回调中?
【发布时间】:2011-06-01 14:46:31
【问题描述】:

我正在做一些表单验证,但我遇到了我想要完成的问题。我希望能够在字段模糊时验证我的邮政编码,还希望在提交表单时调用相同的函数来验证邮政编码,并在邮政编码无效时阻止提交表单。我的代码(通常)是这样的。

function validateZipCode(event){
    $.getJson(
        url,
        params,
        function(data){
            if(data.response === false){
                someError.show();
                event.preventDefault(); //stop the form from being submitted
            }    
        }
    );
}

$('#someForm').submit(function(event){
    validateZipCode(event);
});

$('#zipInput').blur(function(event){
    validateZipCode(event);
})

我已尝试使用此 jQuery pass more parameters into callback 帖子中的方法,但我似乎仍然无法完成我需要的操作。任何帮助表示赞赏。

【问题讨论】:

  • 如果您的console.log(event); 就在您的preventDefault() 上方,那么会返回什么?
  • 你确定你有getJSON而不是getJson吗?

标签: javascript jquery validation


【解决方案1】:

不,当来自 AJAX 事件的回调触发时,该事件已经冒泡并且表单已提交。您可以完成此操作的一种方法是取消提交表单,然后在通过 AJAX 请求的要求时手动提交。

【讨论】:

    【解决方案2】:

    您需要在事件冒泡并由浏览器处理之前阻止它的默认操作。 $.getJson 返回控制并允许 validateZipCode 函数先完成,所以你需要这样做:

    function validateZipCode(event){
        event.preventDefault(); //stop the form from being submitted
        $.getJson(
            url,
            params,
            function(data){
                if(data.response === false){
                    someError.show();
                }
            }
        );
    }
    
    $('#someForm').submit(function(event){
        validateZipCode(event);
    });
    
    $('#zipInput').blur(function(event){
        validateZipCode(event);
    })
    

    【讨论】:

      【解决方案3】:

      不,如果不使用 ajax() 方法并将 async 设置为 false,您将无法从 ajax 请求中返回任何内容。

      一个更好的主意是在提交时始终避免默认,然后在 ajax 回调中手动提交表单。

      【讨论】:

        猜你喜欢
        • 2010-10-06
        • 2013-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多