mirror of
https://github.com/jquery-validation/jquery-validation.git
synced 2025-12-14 20:35:47 +01:00
Core: assign rules to contenteditable via .validate() and .rules() (#1947)
Fixes #1946
This commit is contained in:
committed by
Markus Staab
parent
cf925cf21b
commit
ddaed1ccb5
13
src/core.js
13
src/core.js
@@ -121,7 +121,16 @@ $.extend( $.fn, {
|
|||||||
settings, staticRules, existingRules, data, param, filtered;
|
settings, staticRules, existingRules, data, param, filtered;
|
||||||
|
|
||||||
// If nothing is selected, return empty object; can't chain anyway
|
// If nothing is selected, return empty object; can't chain anyway
|
||||||
if ( element == null || element.form == null ) {
|
if ( element == null ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !element.form && element.hasAttribute( "contenteditable" ) ) {
|
||||||
|
element.form = this.closest( "form" )[ 0 ];
|
||||||
|
element.name = this.attr( "name" );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( element.form == null ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -384,6 +393,7 @@ $.extend( $.validator, {
|
|||||||
// Set form expando on contenteditable
|
// Set form expando on contenteditable
|
||||||
if ( !this.form && this.hasAttribute( "contenteditable" ) ) {
|
if ( !this.form && this.hasAttribute( "contenteditable" ) ) {
|
||||||
this.form = $( this ).closest( "form" )[ 0 ];
|
this.form = $( this ).closest( "form" )[ 0 ];
|
||||||
|
this.name = $( this ).attr( "name" );
|
||||||
}
|
}
|
||||||
|
|
||||||
var validator = $.data( this.form, "validator" ),
|
var validator = $.data( this.form, "validator" ),
|
||||||
@@ -620,6 +630,7 @@ $.extend( $.validator, {
|
|||||||
// Set form expando on contenteditable
|
// Set form expando on contenteditable
|
||||||
if ( this.hasAttribute( "contenteditable" ) ) {
|
if ( this.hasAttribute( "contenteditable" ) ) {
|
||||||
this.form = $( this ).closest( "form" )[ 0 ];
|
this.form = $( this ).closest( "form" )[ 0 ];
|
||||||
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Select only the first element for each name, and only those with rules specified
|
// Select only the first element for each name, and only those with rules specified
|
||||||
|
|||||||
@@ -439,6 +439,11 @@
|
|||||||
<input name="year"/>
|
<input name="year"/>
|
||||||
<button name="submitForm27" value="someValue" type="submit"><span>Submit</span></button>
|
<button name="submitForm27" value="someValue" type="submit"><span>Submit</span></button>
|
||||||
</form>
|
</form>
|
||||||
|
<form id="_contenteditableForm">
|
||||||
|
<div name="first_name" id="first_name" contenteditable placeholder="First Name"></div>
|
||||||
|
<br>
|
||||||
|
<input type="text" name="something" id="_something" />
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
52
test/test.js
52
test/test.js
@@ -1262,6 +1262,58 @@ QUnit.test( "works on contenteditable fields on input event", function( assert )
|
|||||||
assert.noErrorFor( $( "#contenteditableRequiredValid" ) );
|
assert.noErrorFor( $( "#contenteditableRequiredValid" ) );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
QUnit.test( "Assign rules to contenteditable via .validate() method", function( assert ) {
|
||||||
|
assert.expect( 2 );
|
||||||
|
var form = $( "#_contenteditableForm" );
|
||||||
|
var v = form.validate( {
|
||||||
|
rules: {
|
||||||
|
first_name: {
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
something: {
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
var firstNameRules = $( "#first_name", form ).rules();
|
||||||
|
var expectedRules = { required: true };
|
||||||
|
|
||||||
|
assert.deepEqual(
|
||||||
|
firstNameRules, expectedRules, "The rules should be the same"
|
||||||
|
);
|
||||||
|
|
||||||
|
v.form();
|
||||||
|
|
||||||
|
assert.equal( v.numberOfInvalids(), 2, "The form has two errors" );
|
||||||
|
} );
|
||||||
|
|
||||||
|
QUnit.test( "Assign rules to contenteditable via .rules() method", function( assert ) {
|
||||||
|
assert.expect( 2 );
|
||||||
|
var form = $( "#_contenteditableForm" );
|
||||||
|
var v = form.validate( {
|
||||||
|
rules: {
|
||||||
|
something: {
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
$( "#first_name", form ).rules( "add", {
|
||||||
|
required: true
|
||||||
|
} );
|
||||||
|
|
||||||
|
var firstNameRules = $( "#first_name", form ).rules();
|
||||||
|
var expectedRules = { required: true };
|
||||||
|
|
||||||
|
assert.deepEqual(
|
||||||
|
firstNameRules, expectedRules, "The rules should be the same"
|
||||||
|
);
|
||||||
|
|
||||||
|
v.form();
|
||||||
|
|
||||||
|
assert.equal( v.numberOfInvalids(), 2, "The form has two errors" );
|
||||||
|
} );
|
||||||
|
|
||||||
QUnit.module( "misc" );
|
QUnit.module( "misc" );
|
||||||
|
|
||||||
QUnit.test( "success option", function( assert ) {
|
QUnit.test( "success option", function( assert ) {
|
||||||
|
|||||||
Reference in New Issue
Block a user