Side navigation
#14481 closed bug (wontfix)
Opened October 24, 2013 06:32AM UTC
Closed October 24, 2013 02:33PM UTC
Last modified October 24, 2013 02:40PM UTC
jQuery .trigger(event,args) barfs on {length:0} as handler argument
Reported by: | marco@m-s-d.eu | Owned by: | |
---|---|---|---|
Priority: | low | Milestone: | None |
Component: | core | Version: | 2.0.3 |
Keywords: | Cc: | ||
Blocked by: | Blocking: |
Description
Hi!
jQuery 1.8.3 until at least jQuery 2.0.3 mess up the handling of event-handler parameters supplied via .trigger, when the parameter is an object with a "length" property.
In line 4556 (jquery-2.0.3.js, function "trigger", line jQuery.makeArray( data, [ event ])) jQuery makes an array out of the parameter object (why in f**ks name?)... and according to a painful single-step trace, the length property is extended onto the "new" data local variable... which causes the argument to vanish entirely and the handler not recieving it (setting a.length=0 will wipe the array clean!).
A test case is available at http://jsfiddle.net/MGxqT/1/ (see the JS console!). This behavior is neither mentioned on the docs of .trigger() nor on the docs of .on().
Marco
Attachments (0)
Change History (4)
Changed October 24, 2013 02:13PM UTC by comment:1
component: | unfiled → core |
---|---|
keywords: | → needsreview |
priority: | undecided → low |
status: | new → open |
Changed October 24, 2013 02:21PM UTC by comment:2
I'm not sure whether any code does .trigger("click", arguments)
but if it did any "fix" would break that. So I'm inclined to leave it as-is and document it.
There's an easy workaround, always put the object in an Array, like [ {length: 0} ]
. You have to pass an array if you pass multiple args, but it was made optional for the single-arg case and that has been a pain in the butt ever since because of things like this.
Changed October 24, 2013 02:33PM UTC by comment:3
keywords: | needsreview |
---|---|
resolution: | → wontfix |
status: | open → closed |
yea, agreed. Forgot about the arguments
case.
makeArray supports extending array-like objects (such as jQuery instances). However, we could ensure the object is not a plain object. I know we've gone round and round on this, but what are the team's thoughts?