2010-04-20 17 views
5

Vorrei eseguire un codice subito dopo l'aggiunta di un determinato insieme di elementi. jQuery.live() consente di associare i gestori di eventi agli elementi, anche se vengono creati in seguito. Ma AFAIK non esiste un metodo adatto per fare qualcosa di simile al seguente:Come eseguire il codice quando sono collegati elementi come jQuery live() con gli eventi?

$("some selector").live("attach", function() { $(this).whatever(); }); 

Come posso realizzare questo?

MODIFICA: Per chiarimenti; Mi piacerebbe eseguire un'animazione su un elemento appena creato. A parte il fatto che l'animazione è inutile prima di essere aggiunti prima, in alcuni browser la proprietà backgroundColor non viene ereditata dalla classe CSS finché non è collegata al DOM. Ciò causa la rottura del mio codice di animazione.

Quindi mi piacerebbe creare questo elemento, in qualche modo applicare l'animazione da eseguire una volta collegato e quindi restituirlo.

risposta

0

AFAIK non ci sono eventi in jQuery che vengono attivati ​​quando la dom cambia. Si avrebbe bisogno di eseguire codice sull'elemento appena collegato, che diventa pienamente interrogabile non appena si passa alla jQuery esempio

var $span = $('<span>my new document fragment</span>'); 
$span.css('what','ever'); 

$('div').append($span); 
+0

ho aggiunto alcuni dettagli riguardo il mio problema Quello che descrivi è normalmente quello che sto facendo. Ma in questo caso, 'backgroundColor' non è impostato (dalla classe) finché l'elemento non è collegato al DOM. – muhuk

1

molto difficile da fare in modo compatibile cross-browser. Ho dovuto implementare una cosa simile, e avevo bisogno di usare gli eventi di mutazione come @Makram ha suggerito (DOMNodeInserted, DOMNodeRemoved), e un metodo di fallback setInterval (semplicemente il polling per le modifiche) - il setInterval viene fermato se uno degli eventi di mutazione viene licenziato, in quanto è possibile ipotizzare che gli eventi funzionino e che non sia necessario il polling.

Degna di nota è che dal vivo() non sembra di lavorare sempre in IE, quindi sono ricreare manualmente vincolante eventi in alcune circostanze (dopo non vincolante in primo luogo naturalmente!)

Problemi correlati