【问题标题】:jQuery Validate determine which button used in a form submitjQuery Validate 确定表单提交中使用的按钮
【发布时间】:2013-01-30 20:39:34
【问题描述】:

我正在尝试确定按钮是否用于提交表单。

我有两个按钮 - 在表单中取消和提交,根据点击哪个按钮,我想在提交之前执行一些功能。

我可以从服务器端的 POST 确定值​​,但需要先在客户端这样做

我应该调用什么 jquery 函数来确定是否使用了“取消”按钮?

表单的提交正在作为 jquery 验证的 submitHandler 事件的一部分进行处理。

这里是元素:

<input name="submit" type="submit" value="Submit" />
<input name="cancel" type="submit" value="Cancel" />

这是提交处理程序:

submitHandler: function(form) {
                    form.submit();
                    }

谢谢

【问题讨论】:

    标签: jquery jquery-validate


    【解决方案1】:

    您不想在 jQuery Validate 插件中使用外部或额外的 click 处理程序是正确的,因为该插件已经通过其 submitHandler 回调自动捕获 submit click 事件。

    您的问题是您实际上没有“取消”按钮。这只不过是重复的submit 按钮...

    <input name="cancel" type="submit" value="Cancel" />
    

    无论您做什么,该插件始终会将其click 事件视为常规表单提交。如果将其更改为&lt;button&gt;&lt;/button&gt; 会怎样?还是不行。该插件还将button 的click 事件视为常规表单提交。该插件没有内置其他回调函数/选项可以捕获任何其他类型的按钮/取消click事件。

    您唯一的选择是将其放在您的&lt;form&gt;&lt;/form&gt; 标记之外。 Valdiate 插件不会看到它,然后您可以将自己的 click 事件绑定到它。

    你自己的cancel点击事件:

    $('[name="cancel"]').click(function() {
        // your code that handles a cancel click
    });
    

    使用&lt;input type="submit"的演示:http://jsfiddle.net/wZwcQ/

    使用&lt;button&gt;&lt;/button&gt;的演示:http://jsfiddle.net/h7XKc/

    【讨论】:

    • 嗨。我明白这一点。谢谢你。我很惊讶 jquery 没有能力询问表单,即将包含在提交方法中的表单的值 - 在这种情况下是 POST。是否有可以查询的 javascript 对象?
    • @Ray,我不确定你的意思……你的两个inputs 都是type='submit'。因此,如果您将它们都包含在&lt;form&gt;&lt;/form&gt; 中,则插件无法区分;它只是在监听submit 事件,该事件将从任一事件发生。
    • 在 php 中的服务器端脚本上,我可以询问 $_POST 变量,如果设置了 $_POST['cancel'] 我会知道这是用于提交表单并相应地执行脚本的按钮.在研究中,我知道只有那些带有值的项目是通过 HTML POST 发送的。我假设我可以使用 Jquery 或 Javascript 在客户端进行类似的检查。即测试哪个值将包含在 POST 中。如果“取消”我会知道这是取消,如果提交我会知道这是提交等希望这是有道理的
    • @Ray,您可以按照其他答案中的建议使用 jQuery 来做到这一点。但这与 Validate 插件的内置 submitHandler 无关。将取消按钮从form 中拉出要简单得多...“取消”没有发布任何数据,因此无论如何它在&lt;form&gt;&lt;/form&gt; 标签内都没有任何语义。
    • 嗨。同意。我重新考虑了我对脚本的逻辑,并采用了这个解决方案。谢谢
    【解决方案2】:

    试试这个...

       $('#myform').validate({
            rules: {
                field1: {
                    required: true,
                    minlength: 5
                },
                field2: {
                    required: true,
                    minlength: 5
                }
            },
            submitHandler: function (form) { // for demo
                alert('form submitted');
                return false;
            }
        });
    
        $(':submit').on('click', function () {
            if ($(this).attr('name') == 'submit') {
                $(this).closest('form').submit();
            }
        });
    
        $('[name="cancel"]').click(function () {
            // your code that handles a cancel click
            alert('form cancelled');
            return false;
        });
    

    直播Example

    您好。

    【讨论】:

    • 嗨。谢谢你。这种方法虽然创建了一个我理解的单独的点击功能。我如何与验证插件 submitHandler 进行交互?无论如何我可以询问表单对象并确定是否已设置取消或提交值?
    • This is not going to work。该插件内置的submitHandler 仍然会在您单击“取消”按钮后捕获提交事件并提交表单。 jsfiddle.net/vrag6
    • @Sparky 如果你在cancel按钮的点击事件中添加return false,表单不会被提交...问候。
    • 同样,当插件已经内置了一个 click 事件处理程序时,它不需要一个全新的 click 事件处理程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    相关资源
    最近更新 更多