2010-08-20 240 views
0

我正在使用jQuery,并且在查看其他问题后,我似乎无法找到我遇到的问题的答案。我正在尝试验证一个表单并将其一次性提交。它的工作很好,我使用提交按钮,但它尝试从另一个失败的函数调用触发器。Jquery表单提交

jQuery代码:

$(document).ready(function(){ 
    $('#cmdSave').click(function(){ 
    if ($('#age').val() != $('#agechk').val()) { 
     //Do something 
    } 
    else { 
     //Set form varaible 
     $('#frmactn').val('Save'); 
     //Call form submit 
     $('#frmPrflDtls').submit(); 
    } 
    }); 

    $('#frmPrflDtls').submit(function() { 
    return vrfyDetails(); 
    }); 
}); 

HTML:

<form name="frmPrflDtls" id="frmPrflDtls" method="get" action="details.php"> 
    <input name="frmactn" id="frmactn" type="hidden" /> 
    <input name="agechk" id="agechk" type="hidden" value="Senior" /> 
    <input type="text" name="age" id="age" value="Senior" /> 

    <input type="button" id="cmdSave" value="Save" /> 
</form> 

所以,如果我注释掉#cmdSave功能和更改按钮类型提交一切都很好,但因为它是,它会只验证错误,或者什么都不做,但它从不提交。

感谢您的任何帮助。

+0

发现问题的解决方案,vrfyDetails()函数中的错误导致页面刷新屏蔽错误。所以提供的实际代码是可以的。 – noangel 2010-09-10 14:28:18

回答

0

您应该将事件绑定到您的表单而不是按钮。

$(function(){ 
    $("#frmPrflDtls").submit(function(){ 
    if(form is ok){ 
     return true; // this will post your form 
    }else{ 
     return false; // form will not be posted 
    } 
    }); 
}); 
+0

我试过这个,它没有任何区别。我的vrfyDetails()函数返回true或false。就像我说的那样,问题是如果在使用$('#frmPrflDtls')调用验证时验证为真,它将不会提交表单。 – noangel 2010-08-20 12:11:24

1

你应该把按钮类型submit,然后在提交处理程序中添加特定代码:

$('#frmPrflDtls').submit(function() { 
    if ($('#age').val() != $('#agechk').val()) { 
    //Do something 
    return false; // This will prevent the form submission 
    } 
    else { 
    //Set form variable 
    $('#frmactn').val('Save'); 
    return vrfyDetails(); // This will allow the form submission 
    } 
}); 

和你的HTML:

<form name="frmPrflDtls" id="frmPrflDtls" method="get" action="details.php"> 
    <input name="frmactn" id="frmactn" type="hidden" /> 
    <input name="agechk" id="agechk" type="hidden" value="Senior" /> 
    <input type="text" name="age" id="age" value="Senior" /> 

    <input type="submit" id="cmdSave" value="Save" /> 
</form> 

有一个很重要的提交按钮,以便没有JavaScript的用户仍然可以提交表单。 也对服务器进行验证也很重要,因为用户可以轻松规避JavaScript验证。

+0

不幸的是不能这样做,$('#cmdSave')。click(function(){})的内容是PHP在页面加载时动态创建的。有时候这个检查甚至不相关。 – noangel 2010-08-20 12:13:22

+0

那么,如果是这样,为什么你不能“动态创建”这个**代码动态的PHP,并排除它时,它是无关的?这可能比解决SO问题中出现的问题要容易得多,并且可能有各种各样的原因,从错误的HTML到设计的怪异。无论如何,没有一个真正的“提交”是一个可怕的想法。 – MvanGeest 2010-08-20 12:25:00