Widget: Added suppressDisabledCheck flag to _on(). Fixes #8800 - Widget: Ability to use _on() even when disabled.

This commit is contained in:
Scott González 2012-11-09 12:39:41 -05:00
parent 6e0a0553ce
commit 84cd214486
2 changed files with 52 additions and 3 deletions

View File

@ -662,6 +662,46 @@ test( "._on() to element (default)", function() {
.trigger( "keydown" );
});
test( "._on() to element with suppressDisabledCheck", function() {
expect( 18 );
var that, widget;
$.widget( "ui.testWidget", {
_create: function() {
that = this;
this._on( true, {
keyup: this.keyup,
keydown: "keydown"
});
},
keyup: function( event ) {
equal( that, this );
equal( that.element[0], event.currentTarget );
equal( "keyup", event.type );
},
keydown: function( event ) {
equal( that, this );
equal( that.element[0], event.currentTarget );
equal( "keydown", event.type );
}
});
widget = $( "<div></div>" )
.testWidget()
.trigger( "keyup" )
.trigger( "keydown" );
widget
.testWidget( "disable" )
.trigger( "keyup" )
.trigger( "keydown" );
widget
.testWidget( "enable" )
.trigger( "keyup" )
.trigger( "keydown" );
widget
.testWidget( "destroy" )
.trigger( "keyup" )
.trigger( "keydown" );
});
test( "._on() to descendent", function() {
expect( 12 );
var that, widget, descendant;

View File

@ -359,9 +359,17 @@ $.Widget.prototype = {
return this._setOption( "disabled", true );
},
_on: function( element, handlers ) {
_on: function( suppressDisabledCheck, element, handlers ) {
var delegateElement,
instance = this;
// no suppressDisabledCheck flag, shuffle arguments
if ( typeof suppressDisabledCheck !== "boolean" ) {
handlers = element;
element = suppressDisabledCheck;
suppressDisabledCheck = false;
}
// no element argument, shuffle and use this.element
if ( !handlers ) {
handlers = element;
@ -378,8 +386,9 @@ $.Widget.prototype = {
// allow widgets to customize the disabled handling
// - disabled as an array instead of boolean
// - disabled class as method for disabling individual parts
if ( instance.options.disabled === true ||
$( this ).hasClass( "ui-state-disabled" ) ) {
if ( !suppressDisabledCheck &&
( instance.options.disabled === true ||
$( this ).hasClass( "ui-state-disabled" ) ) ) {
return;
}
return ( typeof handler === "string" ? instance[ handler ] : handler )