dispatchEvent of type change on an input breaks subsequent event.which

RESOLVED INVALID

Status

()

RESOLVED INVALID
8 years ago
8 years ago

People

(Reporter: alex, Unassigned)

Tracking

Firefox Tracking Flags

(Not tracked)

Details

(URL)

(Reporter)

Description

8 years ago
User-Agent:       Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; GTB6.4; .NET CLR 2.0.50727; .NET CLR 1.1.4322; MS-RTC LM 8; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; MAXTHON 2.0)
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3

On Safari and Firefox (2.x and 3.x), dispatching the change event
makes event.which undefined on any subsequent keyup events on ANY element!

Reproducible: Always

Steps to Reproduce:
1.Type some characters into either text field at the above url
2.You'll see their codes listed below
3.Push the Dispatch Change event button
4.Type into either text field again - this time you'll see undefined
Actual Results:  
undefined

Expected Results:  
e.which should not break after dispatching a change event

Works correctly in IE (at least 7 and 8)
This is a bug in the page.  In particular, showCode() has:

  var e = window.event || arguments.callee.caller.arguments[0];

But am_fireEvent has this code in the !document.createEventObject branch:

  event = document.createEvent('HTMLEvents');

Note lack of |var|.  So this is assigning the global "event" variable, which is the same thing as "window.event".  After that, showCode always seems the event created by am_fireEvent as window.event, and that of course has no .which property.

This "works correctly" in IE because IE itself will set window.event and also because the IE branch in am_fireEvent actually has |var event|.
Status: UNCONFIRMED → RESOLVED
Last Resolved: 8 years ago
Resolution: --- → INVALID
You need to log in before you can comment on or make changes to this bug.