2012-11-16 9 views
92

Das Problem ist, dass ich einige dynamisch erzeugte Sets von Input-Tags habe und ich auch eine Funktion habe, die jedes Mal eine Eingabe auslösen soll Wert geändert wird.jQuery.on ('change', function() {} triggert nicht für dynamisch erzeugte Eingaben

$('input').on('change', function() { 
    // Does some stuff and logs the event to the console 
}); 

jedoch die .on('change') nicht für dynamisch erzeugte Eingänge Ansteuerung, nur für Artikel, die vorhanden waren, als die Seite geladen wurde. Leider ist dieses lässt mich ein wenig in einer bindung als .on zu verstehen ist der Ersatz für .live() und .delegate() sein, von denen alle Wrapper für .bind() sind:/

Hat jemand anderes dieses Problem oder eine Lösung?

Antwort

182

Sie sollten einen Wahlschalter auf die on Funktion bieten:

$(document).on('change', 'input', function() { 
    // Does some stuff and logs the event to the console 
}); 

In diesem Fall wird es funktionieren wie erwartet. Außerdem ist es besser, ein Element anstelle eines Dokuments anzugeben.

diesen Artikel für ein besseres Verständnis lesen: http://elijahmanor.com/differences-between-jquery-bind-vs-live-vs-delegate-vs-on/

+0

Das ist es festgelegt, danke! – Nick

+1

Sie sind fantastisch! Ich hatte dieses Problem auch. Ich hätte nie gedacht, dass Sie den Selektor als zweiten Parameter hinzufügen könnten. – Tomatrox

+1

yeah wie gezeigt, dass es gut ist, wenn man auf ein Element anstatt auf ein ganzes Dokument beschränkt ist, in dem Fall, dass der dynamische Teil nach irgendeinem div diesen verwendet, zum Beispiel: $ ('# ajax_table'). On ('change', ' input ', function() {... –

3
$("#id").change(function(){ 
    //does some stuff; 
}); 
+9

hmm ... wie wäre es mit ein bisschen Erklärung des Snippets? – kleopatra

+9

Dies funktioniert immer noch nicht mit dynamisch erstellten Elementen, da es versucht, beim Laden von Dokumenten zu binden. Die Antwort von @ArtemVyshniakov bindet jedoch an das Dokument, und wenn etwas in einem der Elemente ändert, wird es ausgelöst, aufgrund des zweiten Arguments kann es dann auf das erforderliche Element zielen (was bedeutet, dass wenn die Funktion ausgelöst wird, es prüft, ob die Quelle des Triggers mit dem zweiten Parameter übereinstimmt) – FullyHumanProgrammer

+0

Add Th ist Code in bereit Funktion. Es wird funktionieren – 4302836

10

verwenden

$('body').on('change', '#id', function() { 
    // Action goes here. 
}); 
+3

keine Notwendigkeit, die '#id' in jquery zu wickeln. – enrey

+0

FYI, @enrey bezog sich auf $ ('# id') 'im Code anstelle von '' # id'' – Loaf

Verwandte Themen