即使在使用e.preventDefault()

时间:2017-03-30 12:09:55

标签: javascript jquery forms

我有一个表单,用于检查表单提交前的ifsc代码,如果给出错误的ifsc,则api返回“失败”。如果响应失败,则不应提交表单。我使用了e.preventDefault(e),但没有帮助。

$('#corporate-signup').on('submit',function(e){

    var ifsc_code = $('#ifsc-code').val();
    var api_url = 'http://api.techm.co.in/api/v1/ifsc/'+ifsc_code;
    $.get(api_url, function(data, status){

       if (data.status === "failure") {
           $('.bank-details').addClass('no-ifsc').text(data.message);
           e.preventDefault(e);
       }

       else{
           $('#corporate-signup').submit()
           }

    });


});  

我不知道这里的错误是什么。我也试过return false而不是preventDefault(),但即使它没有用。

2 个答案:

答案 0 :(得分:2)

我认为,因为你使用异步函数并且不返回false,所以它会在等待答案之前继续提交 - 它不知道等待回调。

由于您在异步回调中手动提交,请尝试在e.preventDefault(e);之后添加$.get

var shouldSubmit = false;
$('#corporate-signup').on('submit',function(e){
    if (!shouldSubmit) {
        // First time entering, this won't submit due to line below
        e.preventDefault(e);
        var ifsc_code = $('#ifsc-code').val();
        var api_url = 'http://api.techm.co.in/api/v1/ifsc/'+ifsc_code;
        $.get(api_url, function(data, status){

           if (data.status === "failure") {
               $('.bank-details').addClass('no-ifsc').text(data.message);
           }

           else{
               shouldSubmit = true;
               $('#corporate-signup').submit()
           }

        });
    }
});  

编辑添加了shouldSubmit布尔值,因为否则会继续点击e.preventDefault(e)并且永远不会提交。根据异步请求获得成功后,您可以将其设置为true并重新提交。

答案 1 :(得分:0)

试试这个

$('#corporate-signup').on('submit',function(e){
    e.preventDefault();
    var ifsc_code = $('#ifsc-code').val();
    var api_url = 'http://api.techm.co.in/api/v1/ifsc/'+ifsc_code;
    $.get(api_url, function(data, status){

       if (data.status === "failure") {
           $('.bank-details').addClass('no-ifsc').text(data.message);
       }
       else{
           $('#corporate-signup')[0].submit() // bypass jQuery bound event
       }
    });
});  
相关问题