jQuery Validation插件有两个提交按钮?

Aji*_*ngh 15 jquery jquery-validate

我有一个表格,有大约50个字段和两个提交按钮,"SAVE"和"SAVE&SUBMIT".如果用户单击"保存",则仅验证某些值,例如.field1,field2.当用户点击"保存并提交"按钮时,它应验证所有50个字段并提交.

<form id="myform">
    <input type="text" name="field1" />
    <br/>
    <input type="text" name="field2" />
    <br/>
    <input type="text" name="field3" />
    <br/>
    <input type="text" name="field4" />
    <br/>
    <input type="submit" id="button1" value="Save" />
    <input type="submit" id="button2" value="Submit" />
</form>


$(document).ready(function () {

    $('#button1').click(function(){          
        $("#myform").validate({             
            rules: {
                field1: {
                    required: true                         
                },
                field2: {
                    required: true                        
                }
            },
            submitHandler: function (form) { // for demo    
                alert("data saved");
            }
        });
    }); 

    $('#button2').click(function(){
        $("#myform").validate({             
            rules: {
                field1: {
                    required: true                          
                },
                field2: {
                    required: true                           
                },
                field3: {
                    required: true                         
                },
                field4: {
                    required: true                          
                }
            },
            submitHandler: function (form) { // for demo
                alert("data submited");
            }
        });
    });

});
Run Code Online (Sandbox Code Playgroud)

我为此创建了jsfiddle:example test

Spa*_*rky 26

你的代码......

$('#button1').click(function(){             
    $("#myform").validate({
        ....
    });             
}); 

$('#button2').click(function(){
    $("#myform").validate({
        ....
    });
});
Run Code Online (Sandbox Code Playgroud)

你绝对不能这样做:

1)您不能.validate()在同一个方法上多次调用该方法form.始终忽略任何后续调用.

2)您不应该将该.validate()方法放在click处理程序中.该.validate()方法是插件的初始化方法,只在DOM ready事件处理程序中调用一次.正确初始化后,插件会自动捕获提交按钮单击.


HTML标记和点击处理程序:

这个插件还可以自动捕获的任何点击input type="submit"button type="submit"元素,并启动验证/提交.

所以,如果你需要控制两个不同的按钮会发生什么,那么你首先需要改变你的按钮进入input type="button"button type="button"元素.

然后,您可以使用click()处理程序根据.rules()单击按钮的方法动态更改规则.请参阅.rules()方法的文档.

用于.submit()以编程方式提交.换句话说,这将触发验证测试并尝试提交IF有效的表单......就像您有一个submit按钮一样.

用于.valid()以编程方式测试表单.换句话说,这将触发验证测试,但不会提交IF有效的表单.


例:

$(document).ready(function () {

    $('#myform').validate({  // initialize the plugin on your form
        // options, rules and/or callbacks
    });

    //  IMPORTANT:  buttons are NOT type="submit"

    $('#button1').on('click', function(){  // capture the click           
        $('#myfield').rules('add', {  // dynamically declare the rules
            required: true,
            email: true
        });
        $('#myOtherField').rules('remove'); // remove the other rules.
        // another '.rules()' call, etc.
        $('#myform').valid();  // trigger the validation & do NOT submit        
    }); 

    $('#button2').on('click', function(){  // capture the click
        $('#myOtherField').rules('add', {  // dynamically declare the rules
            required: true,
            digits: true
        });
        $('#myfield').rules('remove'); // remove the other rules.
        // another '.rules()' call, etc.
        $('#myform').submit();  // trigger the validation & submit     
    });

});
Run Code Online (Sandbox Code Playgroud)

工作演示:http: //jsfiddle.net/Kt93M/

该演示只是应用这些原则的原始jsFiddle.

  • 另一种选择:您可以使用提交按钮,以便服务器知道单击了哪个按钮。这也是一个更具声明性的解决方案:使用 jQuery.validator.addClassRules(),添加或删除某个类以响应点击。这是@Sparky 的小提琴更新:http://jsfiddle.net/s6v45gka/1 (2认同)