繁体   English   中英

我可以防止Default(); 在 ajax 回调中?

[英]Can I preventDefault(); inside of an ajax callback?

我正在做一些表单验证,但我在尝试完成的事情上遇到了麻烦。 I want to be able to validate my zip code on blur of the field, but also call the same function to validate zip on submit of the form, and prevent the form from being submitted if the zip code is invalid. 我的代码(通常)是这样的。

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 中的方法将更多参数传递给回调帖子,但我似乎仍然无法完成我需要的。 任何帮助表示赞赏。

不,当来自 AJAX 事件的回调触发时,该事件已经冒泡并提交了表单。 实现此目的的一种方法是取消提交表单,然后如果它通过了 AJAX 请求的要求,则手动提交它。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM