Skip to content

Commit a228013

Browse files
author
Toolman
committed
Added test and fix for change events originating from outside jQuery. Was not firing jQuery bound events.
1 parent 4a64f9a commit a228013

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

src/event.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -784,13 +784,13 @@ if ( !jQuery.support.changeBubbles ) {
784784
jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
785785
}
786786

787-
return formElems.test( this.nodeName );
787+
return false; // formElems.test( this.nodeName );
788788
},
789789

790790
teardown: function( namespaces ) {
791791
jQuery.event.remove( this, ".specialChange" );
792792

793-
return formElems.test( this.nodeName );
793+
return false; // formElems.test( this.nodeName );
794794
}
795795
};
796796

test/unit/event.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,34 @@ test("bind(), trigger change on select", function() {
226226
}).trigger('change');
227227
});
228228

229+
test("receive change event on formElements triggered outside of jQuery", function() {
230+
var formElements = jQuery("textarea, input:not([type='hidden']), select").filter(":not(:disabled)");
231+
expect(formElements.length);
232+
233+
var handler = function(event) {
234+
ok( event, "JQuery handler: " + event.target.nodeName + " : " + jQuery(event.target).attr("type") );
235+
};
236+
var externalTrigger = function(rawNode, eventName) {
237+
// external to JQuery triggered event in iE
238+
if( document.createEventObject ) {
239+
rawNode.fireEvent("on" + eventName);
240+
241+
// external to JQuery triggered event in other browsers
242+
} else if( document.createEvent ) {
243+
var evObj = document.createEvent('HTMLEvents');
244+
evObj.initEvent( eventName, true, true );
245+
rawNode.dispatchEvent(evObj);
246+
}
247+
}
248+
249+
formElements.bind("change", handler);
250+
formElements.each(function(i,e){
251+
externalTrigger(this, "change");
252+
});
253+
formElements.unbind("change", handler);
254+
});
255+
256+
229257
test("bind(), namespaced events, cloned events", function() {
230258
expect(6);
231259

0 commit comments

Comments
 (0)