2012-10-30 8 views

Odpowiedz

11

Począwszy od wersji 1.7, off() jest preferowaną metodą odrywania:

$('#grolsh').clone(true).off(); 
+0

Więc jaka jest różnica między .off() i .unbind()? –

+1

czytaj tutaj http://stackoverflow.com/questions/9113783/whats-the-difference-between-jquery-bind-and-jquery-on –

1

dodając .off():

$('#grolsh').clone(true) 
    .attr({'id': 'newGrolsh'}) 
    .off() 
    .appendTo('#target'); 

Aktualizacja: Adrian zaproponował .off byłoby lepszym rozwiązaniem na .unbind

7

Wystarczy użyć

$('#grolsh').clone(); // kopii struktury elementem

$('#grolsh').clone(true) // Kopiuje obie dane i zdarzenia wraz ze strukturą

$('#grolsh').clone(true).off() // Kopiuje obie dane oraz zdarzenia i usuwa programy obsługi

Zdarzenia powiązane z .on() i usunięte przy użyciu .off();

Zdarzenia związane z .bind() i usuwane przy użyciu .unbind();

+0

pierwszy przypadek nie jest prawdziwy, dane nie są kopiowane za pomocą 'clone()' i bez argumentów http://jsfiddle.net/ALxz4/ – charlietfl

+0

Dokument stwierdza: "Od wersji jQuery 1.4 wszystkie dane elementów (dołączone metodą .data() są również kopiowane do nowej kopii." ale z moich testów, normalny klon() nie skopiował danych –

+0

Dzięki za wskazanie. Naprawiono sformułowania :) –

0

dzień z jQuery w wersji 1.5, można przekazać drugi parametr (patrz: .clone([withDataAndEvents ] [, deepWithDataAndEvents ])) nie kopiować obsługi zdarzeń:

$('#grolsh').clone(true,false); 
+0

Nie, to tylko "A Boolean wskazujący, czy programy obsługi zdarzeń i dane dla wszystkich dzieci sklonowanego elementu powinny zostać skopiowane." - może się wydawać, że twoje '# grolsh' nie ma żadnych zdarzeń, tylko dane ... ale tak nie jest. –

0

Jeśli naprawdę chcesz skopiować dane dołączone metodą don .data() „zdarzenie t nadużycie (un) wiązanie i po prostu zrobić:

var $original = $(".originalSelector"); 
var $clone = $original.clone().data($original.data()); 

Bo kiedy przekazać obiekt do .data() metody, przedłuża ona aktualne dane z niego.

! WAŻNA UWAGA!
Nie można tego zrobić, jeśli zamierzasz użyć czegoś, co przechowuje odwołania do DOM i używa ich np. jQuery UI przeciągalne etc ...
=> używać tylko na "czyste" danych/podstawowych typów

Powiązane problemy