2015-07-01 144 views
1

我试图验证使用$.get请求的字段。我可以看到错误消息(“计划已经存在”),但表单正在提交。我想阻止表单提交。这里是我的代码:返回false不阻止表单提交

$("#add_plan_subscriptions").submit(function(event) { 
    var flag = true; 
    var subdomain_val = $('[name="plan[subdomain_type_id]"]').val(); 
    var plan_val = $('[name="plan[plan_type_id]"]').val(); 
    var plan_name = $('[name="plan[plan_name]"]').val(); 
    var subdomain_type_id = subdomain_val; 
    var plan_name = $('[name="plan[plan_name]"]').val(); 
    $.get("/plans/check_duplicate_plan",{subdomain_type_id: subdomain_type_id, plan_name: plan_name}, function (response) { 
     if (response){ 
     event.preventDefault() ; 
     var element = $('[name="plan[plan_name]"]'); 
     var message = "Plan already present"; 
     addError(element,message) 
     return false; 
     } 
     else{ 
     var element = $('[name="plan[plan_name]"]'); 
     removeError(element) 
     } 
    }) 
    if(subdomain_val == ""){ 
     var element = $('[name="plan[subdomain_type_id]"]') 
     var message = "Please select user type" 
     addError(element,message) 
     flag = false; 
    } 
    if(subdomain_val != ""){ 
     var element = $('[name="plan[subdomain_type_id]"]') 
     removeError(element) 
    } 
    if(plan_val == ""){ 
     var element = $('[name="plan[plan_type_id]"]') 
     var message = "Please select plan type" 
     addError(element,message) 
     flag = false; 
    } 
    if(plan_val != ""){ 
     var element = $('[name="plan[plan_type_id]"]') 
     removeError(element) 
    } 
    if (!flag){ 
     event.preventDefault(); 
     return false; 
    } 
    return true; 
}); 
+5

这是因为'返回在'$ .get' FALSE'被阻止返回你的匿名函数,而不是'submit'处理程序。 –

+0

提交后你有没有试过看你的控制台? –

回答

-1

你只是防止形式从当有应答或子提交。您需要在事件回调的顶部添加event.preventDefault()

$("#add_plan_subscriptions").submit(function(event) { 
    event.preventDefault(); 
    var flag = true; 
2

现在$.get通话中的GET表单响应之前async模式提交功能调用。 在sync模式,以便使用ajax代替$.get

  $.ajax({ 
       url: '/plans/check_duplicate_plan', 
       data: { subdomain_type_id: subdomain_type_id, plan_name: plan_name}, 
       dataType: 'json', 
       async:false, 
       type: 'GET', 
       success: function (response) { 
        if (response){ 
         event.preventDefault() ; 
         var element = $('[name="plan[plan_name]"]'); 
         var message = "Plan already present"; 
         addError(element,message) 
         return false; 
        } 
        else{ 
         var element = $('[name="plan[plan_name]"]'); 
         removeError(element) 
        } 
       } 
      }) 
+0

不推荐,jQuery的最新版本甚至已经从'$ .ajax()'中删除同步模式。 – Teemu

1

步骤: 1.更改输入类型提交按钮类别 2.增加这一行,而不是真正的回报在javascript

document.forms["signup"].submit(); 

我有类似的问题。考虑这样一个HTML ..

<form name="login" action="ValidateLogin"> 
<button id="SignIn">Login</button> 
    </form> 

然后提交您想为什么还要提交表单是因为你的形式返回true

$.ajax({ 
>    type: "GET", 
>    url: "ManageForm", 
>    data: dataString, 
>    beforeSend: function() 
>    { 
> 
> 
>    }, 
>    success: function(data) 
>    { 
>     if (data == 1) 
>     { alert("data :"+data); 
>      document.getElementById("errorName").innerHTML = "Sorry! UserName Already Taken"; 
>      flag = 0; 
>      return false; 
>      
>     } 
>     else if (data == 2) 
>     { alert("data :"+data); 
>      document.getElementById("erroremail").innerHTML = "Email id Already Registered!"; 
>      flag = 0; 
>      return false; 
>     } 
>     else if (data == 3) 
>     { alert("data :"+data); 
>      document.getElementById("errorphone").innerHTML = "Phone No Already Registered!"; 
>      flag = 0; 
>      return false; 
>     } 
>     else 
>      document.forms["signup"].submit(); 
>    } 
>    
>   }); 
-1

原因在JavaScript形式在您发布的代码的最后两行中,您返回true;

使其返回false;

您发布的代码的最后两行是这样

return true; 
}); 

,而不是让它这样

return false; 
}); 

,并尝试删除你的回报真实的;在该确切的行中,并将其替换为event.preventDefault();

1

删除您event.preventDefault() ;你的$不用彷徨函数中,并在您提交功能添加event.preventDefault() ;return false;,如果你只是想阻止的形式从提交

基于jQuery的文档http://api.jquery.com/event.preventdefault/ event.preventDefautl();被调用时,事件的默认动作不会被触发。因此

我们称这种方法,您提交功能将停止触发的默认操作

希望有助于您了解它:)