diff --git a/src/core.js b/src/core.js index ea30336..7f1db01 100644 --- a/src/core.js +++ b/src/core.js @@ -644,7 +644,7 @@ $.extend( $.validator, { if ( type === "radio" || type === "checkbox" ) { return this.findByName( element.name ).filter( ":checked" ).val(); } else if ( type === "number" && typeof element.validity !== "undefined" ) { - return element.validity.badInput ? false : $element.val(); + return element.validity.badInput ? "NaN" : $element.val(); } if ( element.hasAttribute( "contenteditable" ) ) { @@ -713,7 +713,6 @@ $.extend( $.validator, { for ( method in rules ) { rule = { method: method, parameters: rules[ method ] }; try { - result = $.validator.methods[ method ].call( this, val, element, rule.parameters ); // If a method indicates that the field is optional and therefore valid, diff --git a/test/test.js b/test/test.js index 2f5d7ea..04dec83 100644 --- a/test/test.js +++ b/test/test.js @@ -829,6 +829,49 @@ test( "elementValue() returns the file input's name without the prefix 'C:\\fake ok( !v.element( fileInput ), "The fake file input is invalid (length = 12, maxlength = 10)" ); } ); +test( "", function() { + var v = $( "#userForm" ).validate(), + + // A fake number input + numberInput = { + name: "fakeNumber", + type: "number", + nodeName: "INPUT", + value: "", + form: $( "#userForm" )[ 0 ], + validity: { + badInput: false + }, + hasAttribute: function() { return false; }, + getAttribute: function( name ) { + return this[ name ]; + }, + setAttribute: function() {} + }; + + v.defaultShowErrors = function() {}; + v.validationTargetFor = function() { + return numberInput; + }; + + $( numberInput ).rules( "add", { + required: true + } ); + + deepEqual( $( numberInput ).rules(), { required: true, number: true } ); + ok( !v.element( numberInput ), "The fake number input is invalid" ); + equal( v.errorList[ 0 ].message, $.validator.messages.required, "The error message should be the one of required rule." ); + + numberInput.value = "Not A Number"; + numberInput.validity.badInput = true; + ok( !v.element( numberInput ), "The fake number input is invalid" ); + equal( v.errorList[ 0 ].message, $.validator.messages.number, "The error message should be the one of number rule." ); + + numberInput.value = "2015"; + numberInput.validity.badInput = false; + ok( v.element( numberInput ), "The fake number input is valid" ); +} ); + test( "validating multiple checkboxes with 'required'", function() { expect( 3 ); var checkboxes = $( "#form input[name=check3]" ).prop( "checked", false ),