Skip to content

Commit b3fcf17

Browse files
Michael DellaNocescottgonzalez
Michael DellaNoce
authored andcommitted
Widget: Modified _trigger to invoke callbacks with apply so that handlers are invoked the same way .trigger() invokes them. Fixes #6795 - Widget: _trigger passes array arguments to handlers inconsistently.
1 parent cb8f5b7 commit b3fcf17

File tree

2 files changed

+56
-3
lines changed

2 files changed

+56
-3
lines changed

tests/unit/widget/widget_tickets.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,52 @@ test( "#5830 - Widget: Using inheritance overwrites the base classes options", f
4040
delete $.ui.testWidgetExtension;
4141
});
4242

43+
test( "#6795 - Widget: handle array arguments to _trigger consistently", function() {
44+
expect( 4 );
45+
46+
$.widget( "ui.testWidget", {
47+
_create: function() {},
48+
testEvent: function() {
49+
var ui = {
50+
foo: "bar",
51+
baz: {
52+
qux: 5,
53+
quux: 20
54+
}
55+
};
56+
var extra = {
57+
bar: 5
58+
};
59+
this._trigger( "foo", null, [ ui, extra ] );
60+
}
61+
});
62+
$( "#widget" ).bind( "testwidgetfoo", function( event, ui, extra ) {
63+
same( ui, {
64+
foo: "bar",
65+
baz: {
66+
qux: 5,
67+
quux: 20
68+
}
69+
}, "event: ui hash passed" );
70+
same( extra, {
71+
bar: 5
72+
}, "event: extra argument passed" );
73+
});
74+
$( "#widget" ).testWidget({
75+
foo: function( event, ui, extra ) {
76+
same( ui, {
77+
foo: "bar",
78+
baz: {
79+
qux: 5,
80+
quux: 20
81+
}
82+
}, "callback: ui hash passed" );
83+
same( extra, {
84+
bar: 5
85+
}, "callback: extra argument passed" );
86+
}
87+
})
88+
.testWidget( "testEvent" );
89+
});
90+
4391
}( jQuery ) );

ui/jquery.ui.widget.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,8 @@ $.Widget.prototype = {
289289
},
290290

291291
_trigger: function( type, event, data ) {
292-
var callback = this.options[ type ];
292+
var callback = this.options[ type ],
293+
args;
293294

294295
event = $.Event( event );
295296
event.type = ( type === this.widgetEventPrefix ?
@@ -309,8 +310,12 @@ $.Widget.prototype = {
309310

310311
this.element.trigger( event, data );
311312

312-
return !( $.isFunction(callback) &&
313-
callback.call( this.element[0], event, data ) === false ||
313+
args = $.isArray( data ) ?
314+
[ event ].concat( data ) :
315+
[ event, data ];
316+
317+
return !( $.isFunction( callback ) &&
318+
callback.apply( this.element[0], args ) === false ||
314319
event.isDefaultPrevented() );
315320
}
316321
};

0 commit comments

Comments
 (0)