diff --git a/src/core.js b/src/core.js index 11c57a027..545b53aee 100644 --- a/src/core.js +++ b/src/core.js @@ -265,6 +265,7 @@ $.extend( $.validator, { errorLabelContainer: $( [] ), onsubmit: true, ignore: ":hidden", + inputSelector: "input, select, textarea, [contenteditable]", ignoreTitle: false, onfocusin: function( element ) { this.lastActive = element; @@ -616,7 +617,7 @@ $.extend( $.validator, { // Select all valid inputs inside the form (no submit or reset buttons) return $( this.currentForm ) - .find( "input, select, textarea, [contenteditable]" ) + .find( validator.settings.inputSelector ) .not( ":submit, :reset, :image, :disabled" ) .not( this.settings.ignore ) .filter( function() { diff --git a/test/index.html b/test/index.html index b0bf9bd3d..67cf75de7 100644 --- a/test/index.html +++ b/test/index.html @@ -445,6 +445,26 @@


+
+ + + + + + + + + + + + +
diff --git a/test/test.js b/test/test.js index 1ee1d5308..af2870fee 100644 --- a/test/test.js +++ b/test/test.js @@ -2511,3 +2511,61 @@ QUnit.test( "addMethod, reusing remote in custom method", function( assert ) { e.val( "john.doe@gmail.com" ); assert.strictEqual( v.element( e ), true, "still invalid, because remote validation must block until it returns; dependency-mismatch considered as valid though" ); } ); + +QUnit.test( "inputSelector setting, defaults to native input tags", function( assert ) { + var expectedErrorCount = 3; + var form = $( "#customElements" ); + + var validator = form.validate(); + + assert.ok( !validator.form() ); + assert.strictEqual( validator.numberOfInvalids(), expectedErrorCount ); + + validator.destroy(); +} ); + +QUnit.test( "inputSelector setting, validates custom tags", function( assert ) { + var expectedErrorCount = 1; + var form = $( "#customElements" ); + var validator; + + form + .find( "custom-input" ) + .each( function( index, element ) { + element.value = $( element ).attr( "value" ); + element.name = $( element ).attr( "name" ); + element.form = $( element ).closest( "form" )[ 0 ]; + } ); + + validator = form.validate( { + inputSelector: "custom-input" + } ); + + assert.ok( !validator.form() ); + assert.strictEqual( validator.numberOfInvalids(), expectedErrorCount ); + + validator.destroy(); +} ); + +QUnit.test( "inputSelector setting, validates input and custom tags", function( assert ) { + var expectedErrorCount = 4; + var form = $( "#customElements" ); + var validator; + + form + .find( "custom-input" ) + .each( function( index, element ) { + element.value = $( element ).attr( "value" ); + element.name = $( element ).attr( "name" ); + element.form = $( element ).closest( "form" )[ 0 ]; + } ); + + validator = form.validate( { + inputSelector: "input, textarea, select, custom-input" + } ); + + assert.ok( !validator.form() ); + assert.strictEqual( validator.numberOfInvalids(), expectedErrorCount ); + + validator.destroy(); +} );