Skip to main content

Bug Tracker

Side navigation

#2338 closed bug (fixed)

Opened February 13, 2008 07:25PM UTC

Closed September 28, 2010 10:00PM UTC

Last modified November 11, 2010 03:39AM UTC

jQuery.event.fix() mangles "event.which" when it == false

Reported by: DarkRyder Owned by:
Priority: minor Milestone: 1.4.3
Component: event Version: 1.4.2
Keywords: opera keypress Cc:
Blocked by: Blocking:
Description

The current implementation of

jQuery.event.fix()
uses
!event.which
to determine whether to alter its value, which causes it to get mangled if its value is 0:

// Add which for key events
if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
	event.which = event.charCode || event.keyCode;

This would be a non-issue except that checking whether

event.which === 0
is the only way to distinguish between certain keys in Opera (notoriously, the single-quote key and the right arrow key). Below is an implementation which corrects this problem by explicitly testing whether
event.which
et al. have been defined.

// Add which for key events
if ( typeof event.which == "undefined" && (typeof event.charCode != "undefined" || typeof event.keyCode != "undefined") )
	event.which = typeof event.charCode != "undefined" ? event.charCode : event.keyCode;

Attached are a simple test case and a diff of event.js against revision 4750.

Attachments (2)
Change History (2)

Changed September 28, 2010 10:00PM UTC by john comment:1

milestone: 1.2.41.4.3
resolution: → fixed
status: newclosed
version: 1.2.31.4.2

Changed November 11, 2010 03:39AM UTC by dmethvin comment:2

#6489 is a duplicate of this ticket.