我可以使用preventDefault();在ajax回调中?

时间:2011-06-01 14:46:32

标签: javascript jquery validation

我正在做一些表格验证,而我正在努力完成我想要完成的任务。我希望能够在字段的模糊处验证我的邮政编码,但也可以调用相同的函数来验证表单提交时的zip,并防止在邮政编码无效时提交表单。我的代码(通常)就是这样的。

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帖子中的方法,但我似乎无法完成我需要的工作。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:8)

不,当AJAX事件的回调触发时,事件将已经冒泡并且表单已提交。您可以实现此目的的一种方法是从提交中取消表单,然后如果它从AJAX请求中传递了需求,则手动提交。

答案 1 :(得分: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);
})

答案 2 :(得分:1)

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

更好的想法是始终优先提交您的提交,然后在ajax回调中手动提交表单。