Skip to content

Commit 84cd214

Browse files
committed
Widget: Added suppressDisabledCheck flag to _on(). Fixes #8800 - Widget: Ability to use _on() even when disabled.
1 parent 6e0a055 commit 84cd214

File tree

2 files changed

+52
-3
lines changed

2 files changed

+52
-3
lines changed

tests/unit/widget/widget_core.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,46 @@ test( "._on() to element (default)", function() {
662662
.trigger( "keydown" );
663663
});
664664

665+
test( "._on() to element with suppressDisabledCheck", function() {
666+
expect( 18 );
667+
var that, widget;
668+
$.widget( "ui.testWidget", {
669+
_create: function() {
670+
that = this;
671+
this._on( true, {
672+
keyup: this.keyup,
673+
keydown: "keydown"
674+
});
675+
},
676+
keyup: function( event ) {
677+
equal( that, this );
678+
equal( that.element[0], event.currentTarget );
679+
equal( "keyup", event.type );
680+
},
681+
keydown: function( event ) {
682+
equal( that, this );
683+
equal( that.element[0], event.currentTarget );
684+
equal( "keydown", event.type );
685+
}
686+
});
687+
widget = $( "<div></div>" )
688+
.testWidget()
689+
.trigger( "keyup" )
690+
.trigger( "keydown" );
691+
widget
692+
.testWidget( "disable" )
693+
.trigger( "keyup" )
694+
.trigger( "keydown" );
695+
widget
696+
.testWidget( "enable" )
697+
.trigger( "keyup" )
698+
.trigger( "keydown" );
699+
widget
700+
.testWidget( "destroy" )
701+
.trigger( "keyup" )
702+
.trigger( "keydown" );
703+
});
704+
665705
test( "._on() to descendent", function() {
666706
expect( 12 );
667707
var that, widget, descendant;

ui/jquery.ui.widget.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -359,9 +359,17 @@ $.Widget.prototype = {
359359
return this._setOption( "disabled", true );
360360
},
361361

362-
_on: function( element, handlers ) {
362+
_on: function( suppressDisabledCheck, element, handlers ) {
363363
var delegateElement,
364364
instance = this;
365+
366+
// no suppressDisabledCheck flag, shuffle arguments
367+
if ( typeof suppressDisabledCheck !== "boolean" ) {
368+
handlers = element;
369+
element = suppressDisabledCheck;
370+
suppressDisabledCheck = false;
371+
}
372+
365373
// no element argument, shuffle and use this.element
366374
if ( !handlers ) {
367375
handlers = element;
@@ -378,8 +386,9 @@ $.Widget.prototype = {
378386
// allow widgets to customize the disabled handling
379387
// - disabled as an array instead of boolean
380388
// - disabled class as method for disabling individual parts
381-
if ( instance.options.disabled === true ||
382-
$( this ).hasClass( "ui-state-disabled" ) ) {
389+
if ( !suppressDisabledCheck &&
390+
( instance.options.disabled === true ||
391+
$( this ).hasClass( "ui-state-disabled" ) ) ) {
383392
return;
384393
}
385394
return ( typeof handler === "string" ? instance[ handler ] : handler )

0 commit comments

Comments
 (0)