Forms HTML表单没有';在成功的AJAX验证之后不要提交

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

我有一个简单的HTML表单,在validtion中使用ajax。ajax工作正常,错误显示正确,但如果所有验证都通过,表单将不会提交。基本上,什么也没发生。Firebug中没有发生任何事情,页面本身也没有发生任何事情,等等。这是用来验证表单的Javascript:

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事件。有关完整的详细信息,请参阅我对问题的最后一次编辑。