javascript - Jquery not deep copying from event handler -


i have event handler set using plain javscript this:

myelement.addeventlistener('drop', handledrop, false); 

then, inside handle drop try this:

var mycontainer = $(this.parentnode); mycontainer.after(mycontainer.clone(true, true)); 

however, appears event not being carried on cloned element. happening because not binding event jquery also?

i tried test binding event jquery instead, doesn't support datatransfer object broke other code.

one solution write own wrapper addeventlistener remembers listeners added, can "replayed":

// set event handler after memoizing function myaddeventlistener(element, type, listener, usecapture) {     // store listeners array under element.listeners     if (!element.listeners) { element.listeners=[]; }      // each element of array array of arguments addeventlistener     element.listeners[element.listeners.length] =          array.prototype.slice.call(arguments,1);      // apply listener element     element.addeventlistener (type, listener, usecapture); }  // copy list of event handlers 1 element function copyeventlisteners (from_element, to_element) {     var i;     if (from_element.listeners) {         (i=0; i<from_element.listeners.length; i++) {           element.addeventlistener.apply (to_element, from_element.listeners[i]);         }     } } 

then:

function clone_with_listeners (element) {     var cloned_element = element.clonenode();     copyeventlisteners (element, cloned_element);     return cloned_element; } 

if have no religious convictions preventing overwriting original method on element object:

var orgaddeventlistener = element.addeventlistener;  // our version of addeventlistener element.addeventlistener = function (type, listener, usecapture) {     // store listeners array under element.listeners     if (!this.listeners) { this.listeners=[]; }      // each element of array array of arguments addeventlistener     this.listeners[element.listeners.length] =          array.prototype.slice.call (arguments,0);      // apply listener element     orgaddeventlistener.call (element, type, listener, usecapture); };  // copy list of event handlers element element.copyeventlisteners = function (to_element) {     var i;     if (from_element.listeners) {         (i=0; i<this.listeners.length; i++) {             element.addeventlistener.apply (to_element, this.listeners[i]);         }     } }; 

and then:

element.clonenode = function () {   var cloned_element = this.clonenode();   this.copyeventlisteners (cloned_element);   return cloned_element; }; 

Comments

Popular posts from this blog

c# - SVN Error : "svnadmin: E205000: Too many arguments" -

c# - Copy ObservableCollection to another ObservableCollection -

All overlapping substrings matching a java regex -