Navigation Menu

Skip to content

Commit

Permalink
Use a key name less likely to result in collisions for events on plai…
Browse files Browse the repository at this point in the history
…n JS objects. Fixes bug #7150.
  • Loading branch information
csnover committed Oct 12, 2010
1 parent 6245ecb commit ff6cead
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
18 changes: 11 additions & 7 deletions src/event.js
Expand Up @@ -54,7 +54,10 @@ jQuery.event = {
return;
}

var events = elemData.events,
// Use a key less likely to result in collisions for plain JS objects.
// Fixes bug #7150.
var eventKey = elem.nodeType ? "events" : "__events__",
events = elemData[ eventKey ],
eventHandle = elemData.handle;

if ( typeof events === "function" ) {
Expand All @@ -68,7 +71,7 @@ jQuery.event = {
if ( !elem.nodeType ) {
// On plain objects, create a fn that acts as the holder
// of the values to avoid JSON serialization of event data
elemData.events = elemData = function(){};
elemData[ eventKey ] = elemData = function(){};
}

elemData.events = events = {};
Expand Down Expand Up @@ -170,8 +173,9 @@ jQuery.event = {
}

var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
eventKey = elem.nodeType ? "events" : "__events__",
elemData = jQuery.data( elem ),
events = elemData && elemData.events;
events = elemData && elemData[ eventKey ];

if ( !elemData || !events ) {
return;
Expand Down Expand Up @@ -278,7 +282,7 @@ jQuery.event = {
handle.elem = null;
}

delete elemData.events;
delete elemData[ eventKey ];
delete elemData.handle;

if ( typeof elemData === "function" ) {
Expand Down Expand Up @@ -346,7 +350,7 @@ jQuery.event = {
// Trigger the event, it is assumed that "handle" is a function
var handle = elem.nodeType ?
jQuery.data( elem, "handle" ) :
(jQuery.data( elem, "events" ) || {}).handle;
(jQuery.data( elem, "__events__" ) || {}).handle;

if ( handle ) {
handle.apply( elem, data );
Expand Down Expand Up @@ -420,7 +424,7 @@ jQuery.event = {

event.namespace = event.namespace || namespace_sort.join(".");

events = jQuery.data(this, "events");
events = jQuery.data(this, this.nodeType ? "events" : "__events__");

if ( typeof events === "function" ) {
events = events.events;
Expand Down Expand Up @@ -1044,7 +1048,7 @@ jQuery.each(["live", "die"], function( i, name ) {
function liveHandler( event ) {
var stop, maxLevel, elems = [], selectors = [],
related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
events = jQuery.data( this, "events" );
events = jQuery.data( this, this.nodeType ? "events" : "__events__" );

if ( typeof events === "function" ) {
events = events.events;
Expand Down
2 changes: 1 addition & 1 deletion test/unit/event.js
Expand Up @@ -457,7 +457,7 @@ test("bind()/trigger()/unbind() on plain object", function() {
ok( true, "Custom event run." );
});

var events = jQuery(obj).data("events");
var events = jQuery(obj).data("__events__");
ok( events, "Object has events bound." );
equals( typeof events, "function", "'events' expando is a function on plain objects." );
equals( obj.test, undefined, "Make sure that test event is not on the plain object." );
Expand Down

1 comment on commit ff6cead

@jitter
Copy link
Contributor

@jitter jitter commented on ff6cead Oct 12, 2010

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe I got this wrong but isn't the elem.nodeType ? "events" : "__events__" test missing here #ff6cead event.js Line 289

and hasn't this #ff6cead test/unit/event.js Line 1841 to be replaced with data("__events__") too?

Please sign in to comment.