Forms HTML表单没有';在成功的AJAX验证之后不要提交
我有一个简单的HTML表单,在validtion中使用ajax。ajax工作正常,错误显示正确,但如果所有验证都通过,表单将不会提交。基本上,什么也没发生。Firebug中没有发生任何事情,页面本身也没有发生任何事情,等等。这是用来验证表单的Javascript:Forms HTML表单没有';在成功的AJAX验证之后不要提交,forms,jquery,Forms,Jquery,我有一个简单的HTML表单,在validtion中使用ajax。ajax工作正常,错误显示正确,但如果所有验证都通过,表单将不会提交。基本上,什么也没发生。Firebug中没有发生任何事情,页面本身也没有发生任何事情,等等。这是用来验证表单的Javascript: var pass_form = $('#pass_form'); pass_form.submit( valid_pass_sett ); function valid_pass_sett() { $('.caption_e
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
}
}
<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>
var pass_form=$('pass_form');
通过表格。提交(有效通过设置);
函数有效_pass_sett(){
$('.caption_error')。删除();
$('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();
如果(传递旧的==“”){
//表单上显示错误-已剪断
返回false;
}else if(pass_new==“”){
//表单上显示错误-已剪断
返回false;
}else if(pass\u new!=pass\u confirm\u new){
//表单上显示错误-已剪断
返回false;
}否则如果(通过新长度<8){
//表单上显示错误-已剪断
返回false;
}否则{
$.post(”http://www.example.com/ajax/validate.php“,{//异步验证”
键入:“有效的\旧的\更改\通过”,
传球:传球,
pass_new:pass_new
},有效的\传递\组合\回调);
}
返回false;//取消表单提交
}
函数有效\传递\组合\回调(数据){
如果(数据==‘有效’){
//只有在表格有效的情况下!
通过表单[0]。解除绑定(“提交”)。提交();
//通过表单[0]。提交();
}else if(数据=“无效的旧数据”){
//表单上显示错误-已剪断
}
else if(数据=“无效\新”){
//表单上显示错误-已剪断
}
否则{
//表单上显示错误-已剪断
}
}
下面是表单的基本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
}
}
<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_表单[0]。取消绑定('submit')。submit()代码>行,但表单不会提交。这里有什么帮助吗?更改回调方法中的下一行有效的\u pass\u combo\u回调
//Replace this line
pass_form[0].unbind('submit').submit();
//By this
pass_form.unbind('submit').submit();
我决定放弃将这个函数绑定到submit,而是将表单上的按钮绑定到onclick事件(我用它代替submit按钮),这样就解决了问题。单击按钮时调用Validation,如果客户端验证通过,则表单将提交到服务器进行验证 您不必返回false;//取消表单提交
,您想知道为什么表单没有提交?您正在发布到为页面提供服务的同一域,对吗?您是否使用firebug查看是否提交了表单?使用firebug,您可以查看ajax调用,甚至可以查看您提交的数据。可能是编码错误还是什么?@PeeHaa,这是AJAX请求,表单不应该提交。您是否检查了控制台的错误或检查了它是否达到AJAX请求阶段?@PeeHaa-有人在另一个线程中向我提到,return false
语句取消了表单提交,以确保AJAX调用成功;这就是表单仅在回调函数中提交的原因。如果我删除return false
表单在ajax调用完成之前提交,这是不正确的。仍然没有任何结果。表单未提交。回调中数据的值是多少?你能提醒一下吗?如果它进入了data==“valid”
条件,那么你能尝试pass\u form.unbind('submit')[0].submit()吗代码>?数据值为有效
,且数据==“有效”
条件正在工作。只是提交<代码>传递表单。解除绑定('submit')[0]。提交()代码>也不起作用。不提交。我在最初的答案中添加了一个新的编辑,因为我用不同的方法解决了这个问题。上述解决方案不起作用,因此我使用了onlick事件而不是submit事件。有关完整的详细信息,请参阅我对问题的最后一次编辑。