Fix for #921 (IE clones events)
This commit is contained in:
parent
d0c68580e5
commit
108f308eaa
1 changed files with 23 additions and 4 deletions
27
src/jquery/jquery.js
vendored
27
src/jquery/jquery.js
vendored
|
@ -852,11 +852,30 @@ jQuery.fn = jQuery.prototype = {
|
||||||
* @cat DOM/Manipulation
|
* @cat DOM/Manipulation
|
||||||
*/
|
*/
|
||||||
clone: function(deep) {
|
clone: function(deep) {
|
||||||
return this.pushStack( jQuery.map( this, function(a){
|
// Need to remove events on the element and its descendants
|
||||||
a = a.cloneNode( deep != undefined ? deep : true );
|
var $this = this.add(this.find("*"));
|
||||||
a.$events = null; // drop $events expando to avoid firing incorrect events
|
$this.each(function() {
|
||||||
return a;
|
this._$events = {};
|
||||||
|
for (var type in this.$events)
|
||||||
|
this._$events[type] = jQuery.extend({},this.$events[type]);
|
||||||
|
}).unbind();
|
||||||
|
|
||||||
|
// Do the clone
|
||||||
|
var r = this.pushStack( jQuery.map( this, function(a){
|
||||||
|
return a.cloneNode( deep != undefined ? deep : true );
|
||||||
}) );
|
}) );
|
||||||
|
|
||||||
|
// Add the events back to the original and its descendants
|
||||||
|
$this.each(function() {
|
||||||
|
var events = this._$events;
|
||||||
|
for (var type in events)
|
||||||
|
for (var handler in events[type])
|
||||||
|
jQuery.event.add(this, type, events[type][handler], events[type][handler].data);
|
||||||
|
this._$events = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Return the cloned set
|
||||||
|
return r;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue