2011-09-23 263 views
0

可能重複:
How to prevent form from being submitted?防止表單被提交 - jQuery的?

這裏是我的jQuery代碼:

$(document).ready(function() { 
    $("#register").submit(function (event) { 
    var email = $('#email-agency').val(); 
    /* EMAIL VALIDATION */ 
    if (email == ""){ 
     $('#email-agency').css({"border-color":"#3399ff"}); 
     $('#email-err').html("You must enter your e-mail address.").removeClass("success_msg").addClass("error_msg"); 
    }else{ 
     $('#email-err').html("<img src='http://www.site.com/folder/ajax-loader.gif' />&nbsp;&nbsp;&nbsp;Validating the e-mail address...").removeClass("success_msg").removeClass("error_msg"); 
     $.get('http://www.site.com/folder/email.php',{id: email}, function(result){ 
      if (result == "invalid format"){ 
       $('#email-agency').css({"border-color":"#3399ff"}); 
       $('#email-err').html(email + " is not a valid e-mail address.").removeClass("success_msg").addClass("error_msg"); 
       event.preventDefault(); 
       return false; 
      }else if (result == "taken"){ 
       $('#email-agency').css({"border-color":"#3399ff"}); 
       $('#email-err').html("I'm sorry, this e-mail address is already taken.").removeClass("success_msg").addClass("error_msg"); 
       event.preventDefault(); 
       return false; 
      }else if (result == "available"){ 
       $('#email-agency').css({"border-color":"#1f6d21"}); 
       $('#email-err').html("Congratulations, this e-mail address is available.").removeClass("error_msg").addClass("success_msg"); 
       return true; 
      } 
     }) 
    } 
}); 

出於某種原因,如果電子郵件地址將(result == "taken") - 形式仍提交。

我在做什麼錯?如果收到電子郵件地址,我怎樣才能使表格不提交?

謝謝

回答

2

這是因爲你是從$.get(function()返回false代替$("#register").submit(function()

因爲你的AJAX調用被異步你做也不能設置一個變量與AJAX的返回值呼叫。

因爲該功能已經完成,而AJAX呼叫可能仍在進行中。

你可以使用:

async: false 

而不是做返回false /真做,:

VAR有效= FALSE; //在而不是做回報提交功能

的頂部,這樣做:valid = true; //或假

,並在提交功能的做到底:

return valid; 

編輯

對不起。

通過查看.get()的文檔,它看起來像.get()不需要異步參數。

您可以改用.ajax()函數。 (get是ajax的簡寫)。

http://api.jquery.com/jQuery.ajax/

EDIT2

$(document).ready(function() { 
    $("#register").submit(function (event) { 

    var valid = false; 

    var email = $('#email-agency').val(); 
    if (email == ""){ 
     $('#email-agency').css({"border-color":"#3399ff"}); 
     $('#email-err').html("You must enter your e-mail address.").removeClass("success_msg").addClass("error_msg"); 
    }else{ 
     $('#email-err').html("<img src='http://www.site.com/folder/ajax-loader.gif' />&nbsp;&nbsp;&nbsp;Validating the e-mail address...").removeClass("success_msg").removeClass("error_msg"); 
     $.get('http://www.site.com/folder/email.php',{id: email}, function(result){ 
      if (result == "invalid format"){ 
       $('#email-agency').css({"border-color":"#3399ff"}); 
       $('#email-err').html(email + " is not a valid e-mail address.").removeClass("success_msg").addClass("error_msg"); 
       event.preventDefault(); 
       valid false; 
      }else if (result == "taken"){ 
       $('#email-agency').css({"border-color":"#3399ff"}); 
       $('#email-err').html("I'm sorry, this e-mail address is already taken.").removeClass("success_msg").addClass("error_msg"); 
       event.preventDefault(); 
       valid false; 
      }else if (result == "available"){ 
       $('#email-agency').css({"border-color":"#1f6d21"}); 
       $('#email-err').html("Congratulations, this e-mail address is available.").removeClass("error_msg").addClass("success_msg"); 
       valid true; 
      } 
     }) 
    } 
    return valid; 
    }); 
}); 
+0

如何從主提交函數返回? – Latox

+0

'return valid;'函數結尾處 – PeeHaa

+0

爲什麼downvote? – PeeHaa

0

只要做到:

return $.get('http://www.site.com/folder/email.php',{id: email}, function(result){ 
    //more code 
} 
+0

我有不止一件事情正在驗證中,我只在其中包含電子郵件部分,因爲它是我唯一遇到的問題。我認爲這是因爲event.preventDefault()會覆蓋AJAX結果。返回false;不起作用。 – Latox

+0

'event.preventDefault()似乎不起作用。也許你可以將每個檢查分配給一個變量,如果其中一個變量是valse,那麼你將返回false給你的表單。 – Snicksie

1

您正在異步調用,這意味着你的第一個函數將返回。相反,如果你想這樣做,你應該做的就是在第一次調用時返回false。然後根據第二次調用的回答,您可以調用$(「form」)。submit()或顯示錯誤。現在,您將返回false到AJAX回調中。

基本上你想這樣做:

function validate(e){ 
    e.preventDefault(); //Stop form from submitting 

    $.get(/*foo*/, function(response){ 
    if(response){ //yay validates 
     $("form").submit(); 
    }else{ //Doesn't validate show error. 
     $("form .error").show(); 
    } 
    }); 
}