2011-08-12 52 views
0

我有一个简单的HTML表单,它在validtion的一部分中使用了ajax。 ajax能够正常工作并正确显示错误,但是如果所有验证都通过了,表单不会提交。基本上,没有任何反应。什么也没有发生在Firebug,什么都不会发生页面本身,等等。这是JavaScript这就是所谓的验证形式:成功的AJAX验证后,HTML表单不会提交

var pass_form = $('#pass_form'); 
pass_form.submit(valid_pass_sett); 

function valid_pass_sett() { 
    $('.caption_error').remove(); 
    $('input').removeClass('error'); 
    pass_old = $('input[name=pass_old]').val(); 
    pass_new = $('input[name=pass_new]').val(); 
    pass_confirm_new = $('input[name=pass_confirm_new]').val(); 

    if (pass_old === "") { 
     //display error on form - snipped 
     return false; 
    } else if (pass_new === "") { 
     //display error on form - snipped 
     return false; 
    } else if (pass_new != pass_confirm_new) { 
     //display error on form - snipped 
     return false; 
    } else if (pass_new.length < 8) { 
     //display error on form - snipped 
     return false; 
    } else { 

     $.post("http://www.example.com/ajax/validate.php",{ // async validation 
      type: 'valid_old_change_pass', 
      pass_old: pass_old, 
      pass_new: pass_new 
     }, valid_pass_combo_callback); 

    } 
    return false; // cancel form submission 
} 

function valid_pass_combo_callback(data) { 
    if (data == 'valid') { 
     //only if the form is valid! 
     pass_form[0].unbind('submit').submit(); 
     //pass_form[0].submit(); 
    } else if (data == "invalid_old") { 
     //display error on form - snipped 
    } 
    else if (data == "invalid_new") { 
     //display error on form - snipped 
    } 
    else { 
     //display error on form - snipped 
    } 
} 

,这里是窗体的基本HTML代码:

<form id="pass_form" class="standard" method="post" action="http://www.example.com/preferences" onsubmit="return valid_pass_sett()"> 
    <fieldset> 
     <div> 
      <label for="pass_old">Old password:</label> 

      <input type="password" id="pass_old" name="pass_old" /> 
     </div> 
       <div> 
      <label for="pass_new">New password:</label> 
      <input type="password" id="pass_new" name="pass_new" /> 
     </div> 
     <div> 
      <label for="pass_confirm_new">Confirm new password:</label> 
      <input type="password" id="pass_confirm_new" name="pass_confirm_new" /> 
     </div> 
       <div> 
      <label></label> 
      <input type="submit" id="pass_submit" name="pass_submit" value="Change password"/> 

      <input type="reset" id="pass_reset" name="pass_reset" value="Cancel"/> 
     </div> 
    </fieldset> 
</form> 

的脚本一直到pass_form[0].unbind('submit').submit();一行,但是表单不提交。这里有帮助吗?

+3

你'返回false; //取消表单提交',你想知道为什么表单没有提交? – PeeHaa

+1

您正在发布到为该页面提供服务的相同域,对吗? – gdw2

+0

您是否使用过萤火虫查看提交是否发生?使用萤火虫,您可以查看ajax呼叫,甚至查看您提交的数据。可能,它被编码错了或什么? – Kyle

回答

0

我决定放弃这种绑定功能提交,而是绑定到onclick事件表单上的按钮(我使用其中提交按钮的地方),并解决了这个问题。单击按钮时会调用验证,并且如果客户端验证通过,则将表单提交给服务器进行验证。

0

更改下面的线在回调方法valid_pass_combo_callback

//Replace this line 

    pass_form[0].unbind('submit').submit(); 

//By this 

    pass_form.unbind('submit').submit(); 
+0

什么都没有。表单不提交。 –

+0

回调中'data'的值是多少?你能提醒一下,看看吗? – ShankarSangoli

+0

如果它进入'data =='valid''条件,那么你可以尝试'pass_form.unbind('submit')[0] .submit();'? – ShankarSangoli