📄 test.js
字号:
max: 12 }, lastname: { minlength: 2, maxlength: 8 } } }); var rangeRules = v.rules($("#firstnamec")[0]); equals( "range", rangeRules[0].method ); equals( 5, rangeRules[0].parameters[0] ); equals( 12, rangeRules[0].parameters[1] ); var lengthRules = v.rules($("#lastnamec")[0]); equals( "rangelength", lengthRules[0].method ); equals( 2, lengthRules[0].parameters[0] ); equals( 8, lengthRules[0].parameters[1] ); jQuery.validator.autoCreateRanges = false;});test("rules(), gurantee that required is at front", function() { $("#testForm1").validate(); $("#v2").validate(); $("#subformRequired").validate(); function flatRules(element) { return jQuery.map($(element).rules(), function(x) { return x.method }).join(" "); } equals( "required minlength", flatRules("#firstname") ); equals( "required maxlength minlength", flatRules("#v2-i6") ); equals( "required maxlength", flatRules("#co_name") ); reset(); jQuery.validator.autoCreateRanges = true; $("#v2").validate(); equals( "required rangelength", flatRules("#v2-i6") ); $("#subformRequired").validate({ rules: { co_name: "required" } }); $("#co_name").removeClass(); equals( "required maxlength", flatRules("#co_name") ); jQuery.validator.autoCreateRanges = false;});test("rules(), evaluate dynamic parameters", function() { expect(3); var v = $("#testForm1clean").validate({ rules: { firstname: { min: function(element) { equals( $("#firstnamec")[0], element ); return 12; } } } }); var rules = v.rules($("#firstnamec")[0]); equals( "min", rules[0].method ); equals( 12, rules[0].parameters );});test("rules(), class and attribute combinations", function() { function compare(a, b, msg) { var ret = true; if ( a && b && a.length != undefined && a.length == b.length ) { for ( var i = 0; i < a.length; i++ ) for(var key in a[i]) { if (a[i][key].length) { for (var arrayKey in a[i][key]) { if (a[i][key][arrayKey] != b[i][key][arrayKey]) { ret = false; }
}
} else if (a[i][key] != b[i][key]) { ret = false } } } else ret = false; ok( ret, msg + " expected: " + serialArray(b) + " result: " + serialArray(a) ); } $.validator.addMethod("customMethod1", function() { return false; }, ""); $.validator.addMethod("customMethod2", function() { return false; }, ""); $("#v2").validate({ rules: { 'v2-i7': { required: true, minlength: 2, customMethod: true } }
}); compare( $("#v2-i1").rules(), [{ method: "required", parameters: true }]); compare( $("#v2-i2").rules(), [{ method: "required", parameters: true }, { method: "email", parameters: true }]); compare( $("#v2-i3").rules(), [{ method: "url", parameters: true }]); compare( $("#v2-i4").rules(), [{ method: "required", parameters: true }, { method: "minlength", parameters: 2 }]); jQuery.validator.autoCreateRanges = true; compare( $("#v2-i5").rules(), [{ method: "required", parameters: true }, { method: "customMethod1", parameters: "123" }, { method: "rangelength", parameters: [2, 5] }]); compare( $("#v2-i6").rules(), [{ method: "required", parameters: true }, { method: "customMethod2", parameters: true }, { method: "rangelength", parameters: [2, 5] }]); jQuery.validator.autoCreateRanges = false; compare( $("#v2-i7").rules(), [{ method: "required", parameters: true }, { method: "minlength", parameters: 2 }, { method: "customMethod", parameters: true }]); delete $.validator.methods.customMethod1; delete $.validator.messages.customMethod1; delete $.validator.methods.customMethod2; delete $.validator.messages.customMethod2;});test("defaultMessage(), empty title is ignored", function() { var v = $("#userForm").validate(); equals( "This field is required.", v.defaultMessage($("#username")[0], "required") );});test("formatAndAdd", function() { expect(4); var v = $("#form").validate(); var fakeElement = { form: { id: "foo" }, name: "bar" }; v.formatAndAdd(fakeElement, {method: "maxLength", parameters: 2}) equals( "Please enter no more than 2 characters.", v.errorList[0].message ); equals( "bar", v.errorList[0].element.name ); v.formatAndAdd(fakeElement, {method: "rangeValue", parameters:[2,4]}) equals( "Please enter a value between 2 and 4.", v.errorList[1].message ); v.formatAndAdd(fakeElement, {method: "rangeValue", parameters:[0,4]}) equals( "Please enter a value between 0 and 4.", v.errorList[2].message );});test("formatAndAdd2", function() { expect(3); var v = $("#form").validate(); var fakeElement = { form: { id: "foo" }, name: "bar" }; jQuery.validator.messages.test1 = function(param, element) { equals( v, this ); equals( 0, param ); return "element " + element.name + " is not valid"; }; v.formatAndAdd(fakeElement, {method: "test1", parameters: 0}) equals( "element bar is not valid", v.errorList[0].message );});test("error containers, simple", function() { expect(14); var container = $("#simplecontainer"); var v = $("#form").validate({ errorLabelContainer: container, showErrors: function() { container.find("h3").html( jQuery.format("There are {0} errors in your form.", this.size()) ); this.defaultShowErrors(); } }); v.prepareForm(); ok( v.valid(), "form is valid" ); equals( 0, container.find("label").length, "There should be no error labels" ); equals( "", container.find("h3").html() ); v.prepareForm(); v.errorList = [{message:"bar", element: {name:"foo"}}, {message: "necessary", element: {name:"required"}}]; ok( !v.valid(), "form is not valid after adding errors manually" ); v.showErrors(); equals( 2, container.find("label").length, "There should be two error labels" ); ok( container.is(":visible"), "Check that the container is visible" ); container.find("label").each(function() { ok( $(this).is(":visible"), "Check that each label is visible" ); }); equals( "There are 2 errors in your form.", container.find("h3").html() ); v.prepareForm(); ok( v.valid(), "form is valid after a reset" ); v.showErrors(); equals( 2, container.find("label").length, "There should still be two error labels" ); ok( container.is(":hidden"), "Check that the container is hidden" ); container.find("label").each(function() { ok( $(this).is(":hidden"), "Check that each label is hidden" ); });});test("error containers, with labelcontainer", function() { expect(28); var container = $("#container"), labelcontainer = $("#labelcontainer"); var v = $("#form").validate({ errorContainer: container, errorLabelContainer: labelcontainer, wrapper: "li" }); v.prepareForm(); ok( v.valid(), "form is valid" ); equals( 0, container.find("label").length, "There should be no error labels in the container" ); equals( 0, labelcontainer.find("label").length, "There should be no error labels in the labelcontainer" ); equals( 0, labelcontainer.find("li").length, "There should be no lis labels in the labelcontainer" ); v.prepareForm(); v.errorList = [{message:"bar", element: {name:"foo"}}, {name: "required", message: "necessary", element: {name:"required"}}]; ok( !v.valid(), "form is not valid after adding errors manually" ); v.showErrors(); equals( 0, container.find("label").length, "There should be no error label in the container" ); equals( 2, labelcontainer.find("label").length, "There should be two error labels in the labelcontainer" ); equals( 2, labelcontainer.find("li").length, "There should be two error lis in the labelcontainer" ); ok( container.is(":visible"), "Check that the container is visible" ); ok( labelcontainer.is(":visible"), "Check that the labelcontainer is visible" ); labelcontainer.find("label").each(function() { ok( $(this).is(":visible"), "Check that each label is visible1" ); equals( "li", $(this).parent()[0].tagName.toLowerCase(), "Check that each label is wrapped in an li" ); ok( $(this).parent("li").is(":visible"), "Check that each parent li is visible" ); }); v.prepareForm(); ok( v.valid(), "form is not valid after adding errors manually" ); v.showErrors(); equals( 0, container.find("label").length, "There should be no error label in the container" ); equals( 2, labelcontainer.find("label").length, "There should be two error labels in the labelcontainer" ); equals( 2, labelcontainer.find("li").length, "There should be two error lis in the labelcontainer" ); ok( container.is(":hidden"), "Check that the container is hidden" ); ok( labelcontainer.is(":hidden"), "Check that the labelcontainer is hidden" ); labelcontainer.find("label").each(function() { ok( $(this).is(":hidden"), "Check that each label is visible2" ); equals( "li", $(this).parent()[0].tagName.toLowerCase(), "Check that each label is wrapped in an li" ); ok( $(this).parent("li").is(":hidden"), "Check that each parent li is visible" ); });});test("errorcontainer, show/hide only on submit", function() { expect(12); var container = $("#container"); var labelContainer = $("#labelcontainer"); var v = $("#testForm1").bind("invalid-form.validate", function() { ok( true, "invalid-form event triggered called" ); }).validate({ errorContainer: container, errorLabelContainer: labelContainer, showErrors: function() { container.html( jQuery.format("There are {0} errors in your form.", this.numberOfInvalids()) ); ok( true, "showErrors called" ); this.defaultShowErrors(); } }); equals( "", container.html(), "must be empty" ); equals( "", labelContainer.html(), "must be empty" ); // validate whole form, both showErrors and invalidHandler must be called once // preferably invalidHandler first, showErrors second ok( !v.form(), "invalid form" ); equals( 2, labelContainer.find("label").length ); equals( "There are 2 errors in your form.", container.html() ); ok( labelContainer.is(":visible"), "must be visible" ); ok( container.is(":visible"), "must be visible" ); $("#firstname").val("hix").keyup(); $("#testForm1").triggerHandler("keyup", [jQuery.event.fix({ type: "keyup", target: $("#firstname")[0] })]); equals( 1, labelContainer.find("label:visible").length ); equals( "There are 1 errors in your form.", container.html() );});test("findByName()", function() { isSet( new $.validator({}, document.getElementById("form")).findByName(document.getElementById("radio1").name), $("#form").find("[name=radio1]") );});test("focusInvalid()", function() { expect(1); var inputs = $("#testForm1 input").focus(function() { equals( inputs[0], this, "focused first element" ); }); var v = $("#testForm1").validate(); v.form(); // have to explicitly show input elements with error class, they are hidden by testsuite styles inputs.show(); v.focusInvalid();});test("findLastActive()", function() { expect(3); var v = $("#testForm1").validate(); ok( !v.findLastActive() ); v.form(); v.focusInvalid(); ok( !v.findLastActive() ); try { $("#testForm1").triggerEvent("focusin", $("#testForm1 input:last")[0]); v.focusInvalid(); equals( lastInput, v.findLastActive() ); } catch(e) { ok( true, "Ignore in IE" ); }});test("validating multiple checkboxes with 'required'", function() { expect(3); var checkboxes = $("#form input[@name=check3]").attr("checked", false); equals(5, checkboxes.size()); var v = $("#form").validate({ rules: { check3: "required" } }); v.form(); equals(1, v.size()); checkboxes.filter(":last").attr("checked", true); v.form(); equals(0, v.size());});test("refresh()", function() { var counter = 0; function add() { $("<input class='{required:true}' name='list" + counter++ + "' />").appendTo("#testForm2"); } function errors(expected, message) { equals(expected, v.size(), message ); } var v = $("#testForm2").validate(); v.form(); errors(1); add(); v.form(); errors(2); add(); v.form(); errors(3); $("#testForm2 input[@name=list1]").remove(); v.form(); errors(2); add(); v.form(); errors(3); $("#testForm2 input[@name^=list]").remove(); v.form(); errors(1); $("#agb").attr("disabled", true); v.form(); errors(0); $("#agb").attr("disabled", false); v.form(); errors(1);});test("idOrName()", function() { expect(4); var v = $("#testForm1").validate(); equals( "form8input", v.idOrName( $("#form8input")[0] ) ); equals( "check", v.idOrName( $("#form6check1")[0] ) ); equals( "agree", v.idOrName( $("#agb")[0] ) ); equals( "button", v.idOrName( $("#form :button")[0] ) );});test("resetForm()", function() { function errors(expected, message) { equals(expected, v.size(), message ); } var v = $("#testForm1").validate(); v.form(); errors(2); $("#firstname").val("hiy"); v.resetForm(); errors(0); equals("", $("#firstname").val(), "form plugin is included, therefor resetForm must also reset inputs, not only errors");});test("ajaxSubmit", function() { expect(1); stop(); $("#user").val("Peter"); $("#password").val("foobar"); jQuery("#signupForm").validate({ submitHandler: function(form) { jQuery(form).ajaxSubmit({ success: function(response) { equals("Hi Peter, welcome back.", response); start(); } }); } }); jQuery("#signupForm").triggerHandler("submit");});module("misc");test("success option", function() { expect(7); equals( "", $("#firstname").val() ); var v = $("#testForm1").validate({ success: "valid" }); var label = $("#testForm1 label"); ok( label.is(".error") ); ok( !label.is(".valid") ); v.form(); ok( label.is(".error") ); ok( !label.is(".valid") ); $("#firstname").val("hi"); v.form(); ok( label.is(".error") ); ok( label.is(".valid") );});test("success option2", function() { expect(5); equals( "", $("#firstname").val() ); var v = $("#testForm1").validate({
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -