使用多个提交按钮进行jquery验证时,无法识别第二个提交操作

时间:2012-05-07 00:48:44

标签: php jquery forms jquery-validate

我正在使用jquery validate插件来验证并在我的页面上提交一个表单,该表单有多个提交按钮来运行不同的功能。

一个提交按钮使用$ post方法运行,而另一个使用标准操作方法。

(如果我的术语错误,请坚持我)

我遇到的问题是,如果我使用第一个按钮提交表单,然后使用第二个按钮重试,它会尝试在第二个提交时再次运行第一个操作。

这是我的代码,希望能让事情更清楚......

<form id="myForm" action="add.php">
<input type="submit" id="myfunction" />
<input type="submit"​ id="add" />
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​<input type="text" name="myvalue" />
</form>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

和我的验证码......

$("#myForm input[type=submit]").click(function(e) {
        if (e.target.id == 'myfunction') {
            $("#myForm").validate({
                submitHandler: function(form) {
                    $.post('myfunctionpage.php', $("#myForm").serialize(), function(data) { });
                }
            });
        } else if (e.target.id == 'add') {
            $("#myForm").validate({
                rules: {
                    name: {
                        required: true,
                    }
                }
            });
        }

    });​

3 个答案:

答案 0 :(得分:1)

为什么不将代码分成两段?

$("#myfunction").click(function(e) {

            $("#myForm").validate({
                submitHandler: function(form) {
                    $.post('myfunctionpage.php', $("#myForm").serialize(), function(data) { });
                }
            });
        } 

$("#add").click(function(e) {
            $("#myForm").validate({
                rules: {
                    name: {
                        required: true
                    }
                }
            });
        }

答案 1 :(得分:1)

您需要在$ .post案例中停止表单提交。尝试从click事件处理程序返回false,这应该阻止事件冒泡到表单并导致它提交。

我个人勾选到表单元素上的submit事件,而不是单击按钮上的事件。原因是许多用户通过将光标放在文本框中然后按回车来提交表单。没有任何点击事件发生,您的代码被绕过......

另外,自从我使用了validate插件以来已经有一段时间了,但我认为你在提交表单后调用validate()是错误的。检查文档是否正确使用。

答案 2 :(得分:1)

以防万一有人在寻找。 在第一次提交后使用简单的$(“#myForm”)。validate()。destroy();为了清除“表格数据”。

https://jqueryvalidation.org/Validator.destroy/