【问题标题】:jquery validate with multiple submit buttons does not recognise second submit action带有多个提交按钮的 jquery 验证无法识别第二次提交操作
【发布时间】:2012-05-15 13:47:16
【问题描述】:

我正在使用 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,
                    }
                }
            });
        }

    });​

【问题讨论】:

    标签: php jquery forms jquery-validate


    【解决方案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
                        }
                    }
                });
            }
    

    【讨论】:

      【解决方案2】:

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

      我个人挂钩到表单元素上的submit 事件,而不是按钮上的单击事件。原因是许多用户通过将光标放在文本框中然后按 Enter 来提交表单。从未发生过点击事件,并且您的代码被绕过...

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2017-10-21
          • 1970-01-01
          • 2013-08-25
          • 1970-01-01
          • 2017-04-12
          • 2021-04-29
          • 2019-01-31
          • 2014-12-11
          • 2018-02-14
          相关资源
          最近更新 更多