2016-06-03 16 views
0

Hallo zusammen mit dynamisch erstellten Elementen Benutzereingabe bekam ich folgendes Problem bin Begegnung Ich habe 3 divs dynamisch von Ajax geladen wie so:nicht in der Lage das Produkt zu finden, die

<div class="item" id="item1"> // Dynamically loaded 
    <input> 
    <input> 
</div> 
<div class="item" id="item2"> // Dynamically loaded 
    <input> 
    <input> 
</div> 
<div class="item" id="item3"> // Dynamically loaded 
    <input> 
    <input> 
</div> 

$(document).on('change', '.item', function() { 


}); 

Was ich will, erreichen ist, wenn ich Ändern Sie den Eingang eines der drei Divs, ich möchte wissen, wo die Eingabe bereitgestellt wurde. Da die Elemente dynamisch geladen werden, kann ich keinen direkten Selektor verwenden, aber ich muss $(document).on verwenden, und weil ich den direkten Selektor nicht verwende, kann ich (this) nicht verwenden. Wie finde ich heraus, in welchen Artikel Änderungen vorgenommen wurden?

Vielen Dank im Voraus!

+0

Vielleicht versuchen: '$ (document) .auf ('change', '.item Eingang', function() {' – Pierre

+0

bekommt immer noch das gleiche Problem Die Funktion wird ausgelöst, aber wenn ich (this) benutze, bekomme ich die ganze Seite als Ausgabe –

+2

Aber in Ihrem Callback-Abschluss entspricht das '$ (this)' Ihrer geänderten Eingabe – Pierre

Antwort

1

Das erste Argument des Handlers - zum Beispiel e - würde das Ereignis empfangen, wenn sie deklariert ist. Dann hat das Argument e die Eigenschaft target, die Ihnen das HTML-Element gibt, von dem das Ereignis stammt. So würde dies gibt Ihnen einen Verweis auf die veränderten input:

$(document).on('change', '.item', function(e) { 
    var targetInput = e.target; 
    var parent = $(targetInput).closest("div.item"); 
    // Do something ... 
}); 
+2

Wenn Sie jQuery verwenden, können Sie $ (this) .closes ("div.item") verwenden, anstatt eine andere Variable zu deklarieren. –

+0

@AlexanderKludt: Es ist nicht das Gleiche. 'this' gibt dir ein Element, auf das du für das Ereignis hörst, während' .target' dir das Element gibt, das das Ereignis ausgelöst hat. –

0

Gemäß Ihrem HTML hat jedes Div eine andere ID, daher können Sie die Div-ID bei der Änderung der Eingabe erhalten. Bitte testen Sie diesen Code und testen Sie ihn.

$("input").on('keyup', function(){ 

    //Get the parent div id, 
    var changeDivID = $(this).parents('div').attr("id"); 
    alert(changeDivID); 

}); 
+0

Danke für deine Antwort, aber es beantwortet die Frage nicht, da die 3 Divs von php geladen werden, kann ich '$ (" in put "). on 'aber ich muss $ (document) verwenden. auf –

+0

@Frank, möchten Sie herausfinden, welche Eingabe korrekt geändert wurde? – Samir

+0

In Ihrer Frage ist es Erwähnung "Was ich erreichen möchte ist, wenn ich eine Änderung am Eingang eines der drei Divs mache, möchte ich wissen, wo die Eingabe bereitgestellt wurde". Wenn Sie meinen Code ausführen, wird die ID des übergeordneten divs angezeigt. In Bezug auf diese ID können Sie wissen, welche Eingabe. Hoffe ich bin richtig. – Samir

Verwandte Themen