2013-07-03 14 views
23

Es gibt viele Fragen, die diese Frage zu stellen scheinen, aber am Ende wollen sie nur .click Ereignisse und nicht .each anhängen und so die allgemein akzeptierte Antwort in allen von ihnen gehören $("body").on("click", ".selector", function(){}); und das ist definitiv nicht was ich wollen.Verwendung von .each für dynamische Objekte in jQuery?

Ich habe einige generierte Eingaben und ich muss den Wert jedes einzelnen gleichzeitig ändern. Normalerweise würde ich $(".inputs").each(function(){$(this).val("new-value")}; oder etwas in dieser Richtung, aber ich kann nicht wegen der dynamischen Aspekt.

Also, wie würdest du eine $("body").on("each", ".inputs", function(){}); machen?

+1

Warum ist es wichtig, ob sie dynamisch sind? – Esailija

+5

Es würde helfen, wenn Sie die Situation klarer erklären würden, denn so wie es aussieht, macht diese Frage wenig Sinn. – Pointy

+1

"wegen der dynamischen Aspekt" an einem Punkt möchten Sie die Werte ändern ... wann? –

Antwort

5

Eigentlich ist es so einfach wie das .each innerhalb setTimout läuft.

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

Wir haben fast genau die gleiche Frage und dachten über anfänglich nach, weil .ach neu eingefügte Elemente nicht finden kann. Können Sie näher erläutern, warum setTimeout die Magie als .on für dynamisch eingefügte Elemente verwendet? – user938363

+0

setTimeout führt den Code nach einem bestimmten Zeitraum aus. Wenn also setTimeout lange genug ist, um nach dem Einfügen der Elemente ausgeführt zu werden, funktioniert es. Wenn es vor dem Einfügen Ihrer Elemente ausgeführt wird, funktioniert es nicht. In dem Fall, in dem der Benutzer mit dem Bildschirm interagiert, ist es am besten, nichts wie oben zu tun, weil ich es unter Last gemacht habe. Wenn Sie Ihre Funktion in ein anderes Skript einfügen und dann ausführen, sollten Sie in Ordnung sein, nachdem alle Benutzerinteraktionen abgeschlossen sind. –

2

Sie können $(".inputs").each(function(){$(this).val("new-value")}; perfekt für dynamische Elemente verwenden. Sie müssen das Skript nur erneut ausführen, nachdem Sie ein Element dynamisch hinzugefügt haben.

Aus den Kommentaren dachte ich, dass ein Missverständnis über "jeder" existiert. 'Jeder' ist kein Ereignis und daher wird kein Ereignis ausgelöst, wenn 'jeder' aufgerufen wird. Wenn Sie möchten, Spur von zusätzlichen Elementen zu halten, weil sie keine Kontrolle haben, wenn sie hinzugefügt werden Sie einen Timer bräuchten:

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

Er * könnte * das tun, aber warum, wenn '$ (". Inputs "). Val (" new-value ");' funktioniert auch? – Pointy

+0

Was ist, wenn Sie es nicht erneut ausführen können? I.e. Nutzen Sie die Vorteile von body.on? –

+0

@Pointy Ich dachte, er vereinfachte dieses Skript, wollte aber den Wert auf etwas setzen, das für jeden Eingang anders ist. Wenn Sie in o_O Elemente dynamisch hinzufügen können, können Sie das Skript erneut ausführen. Wie würden Sie sonst Elemente dynamisch hinzufügen? Irgendein Skript ist für dieses Recht erforderlich? –

3

$.each Arbeiten mit neuen Elementen hinzugefügt.

http://jsfiddle.net/4SV7n/

tun etwas anderes jedes Mal: ​​

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

+1

Nun, das funktioniert natürlich. Es wäre einfach, wenn ich den Luxus hätte, das Drehbuch zu rufen, wann immer ich es möchte. Unglücklicherweise ist der Vorteil von .on-Vorteilen, dass ich diese Kontrolle nicht habe. –

+0

Könntest du eine Geige machen, die eine Art Versuch ist, über was du redest, damit es klarer ist? Es fällt mir schwer, herauszufinden, was Sie versuchen zu tun. –

+0

Dies ist, weil Sie es auf klicken aufrufen, was, wenn wir Funktion ohne irgendein Ereignis feuern müssen –