2013-07-03 25 views
23

Istnieje wiele pytań, które zdają się pytać o to, ale w końcu wszystko, co chcą, to dołączenie zdarzeń .click, a nie .each, więc ogólnie przyjęta odpowiedź w nich wszystkich to $("body").on("click", ".selector", function(){}); i to zdecydowanie nie jest to, co ja chcieć.Korzystanie z .each na obiektach dynamicznych w jQuery?

Mam kilka wygenerowanych danych wejściowych i muszę zmienić wartość każdego z nich w tym samym czasie. Normalnie chciałbym $(".inputs").each(function(){$(this).val("new-value")}; lub coś podobnego, jednak nie mogę z powodu dynamicznego aspektu.

Więc jak zrobiłbyś $("body").on("each", ".inputs", function(){});?

+1

Dlaczego to ma znaczenie, czy są dynamiczne? – Esailija

+5

To pomogłoby, gdybyś wyjaśnił sytuację lepiej, ponieważ w obecnej formie to pytanie nie ma większego sensu. – Pointy

+1

"ze względu na aspekt dynamiczny" w którymś momencie chcesz zmienić wartości ... kiedy? –

Odpowiedz

5

Właściwie, to tak proste, jak prowadzenie .each wewnątrz setTimout.

setTimeout(function(){ 
    $(".inputs").each(function(){$(this).val("new-value")}); 
}, 5000); 
+0

Mamy prawie dokładnie to samo pytanie i zastanawialiśmy się na początku, ponieważ .each nie może znaleźć nowo wstawionych elementów. Czy możesz podać więcej szczegółów na temat tego, dlaczego setTimeout robi magię jako .on dla dynamicznie wstawianych elementów? – user938363

+0

setTimeout uruchamia kod po określonym czasie. Więc jeśli setTimeout jest wystarczająco długi, aby uruchomić po włożonych elementów, to będzie działać. Jeśli uruchomi się przed włożeniem elementów, to nie będzie działać. W przypadku, gdy użytkownik będzie wchodził w interakcję z ekranem, najlepiej nie robić nic takiego jak powyżej, ponieważ robiłem to podczas ładowania. Jeśli umieścisz swoją funkcję w innym skrypcie, a następnie uruchomisz ją, powinieneś być w porządku po zakończeniu interakcji użytkownika. –

2

Możesz używać $(".inputs").each(function(){$(this).val("new-value")}; doskonale na dynamicznych elementach. Wystarczy ponownie uruchomić skrypt po dodaniu elementu dynamicznie.

Z komentarzy doszedłem do wniosku, że istnieje pewne nieporozumienie dotyczące "każdego". "Każdy" nie jest zdarzeniem, więc żadne zdarzenie nie jest wywoływane, jeśli wywoływane jest "każde". Jeśli chcesz śledzić dodanych elementów, ponieważ nie masz kontroli nad tym, kiedy są one dodawane którą trzeba Timer:

setInterval(function(){ $(".inputs").each(function(){$(this).val("new-value")}; },500); 
+0

On * może * to zrobić, ale dlaczego, gdy '$ (". Inputs "). Val (" nowa wartość ");' działa też? – Pointy

+0

Co jeśli nie możesz ponownie uruchomić? To znaczy. wykorzystać zalety body.on? –

+0

@Pointy Pomyślałem, że uprościł ten skrypt, ale faktycznie chciał ustawić wartość dla czegoś, co jest inne dla każdego wejścia. W o_O, jeśli możesz dynamicznie dodawać elementy, możesz ponownie uruchomić ten skrypt. Jak mógłbyś dynamicznie dodawać elementy? Jakiś skrypt jest wymagany do tego prawa? –

3

$.each współpracuje z dowolnym nowych elementów dodanych.

http://jsfiddle.net/4SV7n/

za każdym razem robić coś innego:

http://jsfiddle.net/4SV7n/1/

+1

Cóż, oczywiście, że działa. Byłoby łatwo, gdybym miał luksus wywoływania scenariusza, kiedy tylko chcę. Niestety, brak potrzeby .on nie ma takiej kontroli. –

+0

Czy możesz zrobić skrzypce, które jest próbą tego, o czym mówisz, więc jest bardziej zrozumiały? Mam trudności z ustaleniem, co próbujesz zrobić. –

+0

to dlatego, że dzwonisz do niego klikając, co jeśli musimy uruchomić funkcję bez żadnego zdarzenia –