From 4424bda377336342ce04ab5299bf1ce624cdb7b1 Mon Sep 17 00:00:00 2001 From: Dave Methvin Date: Mon, 20 Dec 2010 22:23:59 -0500 Subject: [PATCH] Use a for loop rather than for/in loop when copying events, so that code will work with an augmented Array.prototype. Fixes 7809. --- src/manipulation.js | 10 +++++----- test/unit/manipulation.js | 3 +++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/manipulation.js b/src/manipulation.js index 7dea349..9d70a7b 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -370,14 +370,14 @@ function root( elem, cur ) { } function cloneCopyEvent(orig, ret) { - var i = 0; + var node = 0; ret.each(function() { - if ( this.nodeType !== 1 || this.nodeName !== (orig[i] && orig[i].nodeName) ) { + if ( this.nodeType !== 1 || this.nodeName !== (orig[node] && orig[node].nodeName) ) { return; } - var oldData = jQuery.data( orig[i++] ), + var oldData = jQuery.data( orig[node++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events; @@ -386,8 +386,8 @@ function cloneCopyEvent(orig, ret) { curData.events = {}; for ( var type in events ) { - for ( var handler in events[ type ] ) { - jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); + for ( var i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( this, type, events[ type ][ i ], events[ type ][ i ].data ); } } } diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js index d49029e..cbc0b77 100644 --- a/test/unit/manipulation.js +++ b/test/unit/manipulation.js @@ -1,5 +1,8 @@ module("manipulation"); +// Ensure that an extended Array prototype doesn't break jQuery +Array.prototype.arrayProtoFn = function(arg) { throw("arrayProtoFn should not be called"); }; + var bareObj = function(value) { return value; }; var functionReturningObj = function(value) { return (function() { return value; }); }; -- 1.7.10.4