2012-04-19 5 views
5

Ho il seguentegestori di eventi copia da una serie di elementi ad un altro utilizzando jQuery

var $header = $('.inner th'); 
var $fixedHeader = $(".header1 th"); 

    $header.each(function (index) { 
      // i need to copy all events from $header[index] to $fixedHeader[index] 
    }); 

Come faccio a copiare i gestori di eventi (onClick, onDblClick..etc) dagli elementi nel primo set al elementi adiacenti nel secondo set ?? Sono un principiante in jQuery e ho un momento difficile.

+0

Cosa intendi per "eventi"? –

+0

onlcick, ondblclick ... ecc. –

+0

Ah, OK. Vuoi dire _event handlers_. –

risposta

2

È necessario utilizzare il metodo .data('events') di jquery.

Ho fornito un jsFiddle funzionante per avere un'idea di dove iniziare.

http://jsfiddle.net/hx8gf/2/

so Alphamale mi ha battuto, ma io sono ancora intenzione di pubblicarlo in caso è utile.

è quasi identico in ogni caso ...

+0

Per qualche ragione il codice di @AlphaMale non ha funzionato. il tuo ha fatto bene. Ho aggiunto il codice che hai postato in jsFiddle nella risposta .. grazie amico. –

+0

+1 per il violino, Saluti ... :) – AlphaMale

2

qualche cosa come questo può aiutare:

var header = $('.inner th'); 
var fixedHeader = $(".header1 th"); 

header.each(function (index) { 

    var events = $(header).data("events"); //Gives you all events of an element 

    $.each(events, function(i, event) { //Loop through all the events 

    $.each(event, function(j, h) { //Loop through all the handlers attached for a event 

     fixedHeader.bind(i, h.handler); //Bind the handler with the event 

    }); 

    }); 

}); 

Spero che questo aiuti.

+0

In aumento per il gusto. – Ohgodwhy

+0

non funziona, non riesco a vedere dove si lega il gestore all'elemento "Adiacente" ... –

+0

fixedHeader.bind (i, h.handler); Questa linea lega tutti gli eventhandler dell'intestazione all'intestazione fissa. non è vero ?! – AlphaMale

0

Il clone (true) la funzione in jQuery non può copiare la gestione degli eventi, ma si può solo copiare element.If si desidera copiare esso, è per aggiungere un evento vincolante. Puoi dare un'occhiata al binding di eventi di JQUERY. Chiamare la funzione di rilegatura nella funzione di callback. questo può aiutare.

+0

Ho letto per ore e non ho potuto ... l'intera cosa jquery non è "vincolante" per il mio cervello! –

5

So che questo ha già ricevuto risposta alcune volte, ma qui è una soluzione tutto compreso, basata sulle soluzioni precedenti.

function copyEvents(source, destination) { 
    var events; 

    //copying from one to one or more 
    source = $(source).first(); 
    destination = $(destination); 

    //get all the events from the source 
    events = $(source).data('events'); 
    if (!events) return; 

    //make copies of all events for each destination 
    destination.each(function() { 
     var t = $(this); 
     $.each(events, function(index, event) { 
      $.each(event, function(i, v) { 
       t.bind(v.type, v.handler); 
      }); 
     }); 
    }); 
} 
Problemi correlati