Stworzyłem serię niestandardowych zdarzeń jQuery do wykorzystania w mobilnych aplikacjach internetowych. Działają świetnie i zostały przetestowane. Jednak napotkałem mały problem, którego nie rozumiem.
Używam .clone()
kilku elementów w DOM, które zawierają przycisk. Z przyciskiem są powiązane niektóre zdarzenia niestandardowe (zdarzenia są powiązane za pomocą .on()
), ale. Niestety, kiedy używam jQuery .clone()
, wiązania nie są zachowywane i muszę je dodać ponownie.
Czy ktoś spotkał się z tym wcześniej, czy ktoś wie o potencjalnym obejściu? Myślałem, że używanie .on()
ma na celu zachowanie wiązania elementów, które istnieją teraz lub w przyszłości?
javascript
jquery
BenM
źródło
źródło
.clone
; jest to logika delegowania zdarzeń jQuery i działa, jeśli przekażesz dodatkowy selektor do.on
.Odpowiedzi:
Myślę, że powinieneś użyć tego przeciążenia metody .clone () :
Uważaj,
.on()
ponieważ w rzeczywistości nie wiąże zdarzeń z celami, ale z elementem, do którego delegujesz. Więc jeśli masz:Zdarzenia są w rzeczywistości powiązane
#container
. Kliknięcie.button
elementu powoduje przejście do#container
elementu. Element, który wyzwolił zdarzenie, jest oceniany na podstawie parametru selektora.on()
i jeśli pasuje, wykonywana jest procedura obsługi zdarzenia. Tak działa delegowanie zdarzeń.Jeśli sklonujesz element #container, musisz sklonować głęboko zdarzenia i dane,
.on()
aby zachować powiązania utworzone za pomocą .Nie byłoby to konieczne, gdybyś używał
.on()
na rodzicu domeny#container
.źródło
.clone()
akceptowanych argumentów. FML. Dzięki za pomoc..clone()
nie klonowaniem.data()
(obudata-xxxx="somedata"
i danych w DOM) .. To też rozwiązuje problem!click
wydarzenie, aby dołączyć nowy sklonowany element div.ready
nie działałNależy mieć świadomość, że do wersji 1.5 jQuery dodano funkcję głębokiego klonowania.
Więcej informacji na ten temat:
http://api.jquery.com/clone/
źródło