防止提交表单 - jquery?

时间:2011-09-23 07:24:00

标签: jquery

  

可能重复:
  How to prevent form from being submitted?

这是我的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") - 表格仍然提交。

我做错了什么?如果收到电子邮件地址,我怎么能不提交表格?

谢谢

3 个答案:

答案 0 :(得分:2)

这是因为您要从false而不是$.get(function()

返回$("#register").submit(function()

因为您的AJAX调用是异步的,所以也无法使用AJAX调用的返回值设置变量。

因为该函数已经完成,而AJAX调用可能仍在进行中。

您可以使用:

async: false

而不是返回false / true do:

var valid = false; //在提交功能的顶部

而不是返回do:valid = true; //或false

在提交功能结束时执行:

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

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

答案 2 :(得分:0)

只是做:

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