2017-02-03 8 views
0

Ich mache ein Programm, das Boxen erstellt, wenn ich auf eine Schaltfläche klicken. Ich habe eine "Modell" Box ausgeblendet, wenn ich auf die Schaltfläche klicke, klont sie die Modellbox und ändert ihre ID.jQuery nicht Element der Auswahl

Innerhalb dieser Boxen habe ich einen Link, der eine Funktion zu tun haben, wenn sie angeklickt, aber jQuery scheint nicht auf dieses Element zu finden, so dass ich nichts, wenn ich auf den Link klicken.

Hier ist mein Code:

$('#box-' + number).find('a').click(function(){ 
    alert('boop'); //function 
}); 

Variable 'Anzahl' ist die Nummer der Box. Wie gesagt, die ID wird geändert, wenn ich die Modellbox kloniere.

Das Modell Box ist so etwas wie dieses:

<div id="box-model"> 
    <div class="box"> 
     <div class="heading"> 
     <a class="link-class">¡Click Me!</a> 
     </div> 
     <div class="body"> 
     CONTENT 
     </div> 
    </div> 
</div> 
+0

Dies kann nur aufgrund der Abstraktionsebene, aber Sie würden besser mit 'on' zu delegieren, so etwas wie ...' $ (document) .auf ("Klick", "Feld ein.", function() {...}); '. Ich kann mit deinem Beispiel nichts falsch sehen, also funktioniert die Erstellung der Box aus dem Modell möglicherweise nicht. Hast du ein Geigen- oder Codepen-Beispiel? –

Antwort

2

Sie müssen die Ereignisdelegierung verwenden, um Ereignisse an dynamisch hinzugefügte Elemente anzuhängen.

Da die IDs dynamisch generiert werden, können Sie sie nicht als Wähler in Ereignisse Delegation verwenden. Sie verwenden Klassenauswahl Zielankerelemente innerhalb .header Rether kann:

$('body').on('click','.heading a',function(){ 
    alert('boop'); //function 
}); 
+0

Dies funktionierte. Vielen Dank! Aber wie kann ich nun die Box erkennen, mit der der Benutzer auf den Link klickt? – Juanky

+0

Sie Kontext geklickt Element ('this') in geklickt Veranstaltung. Sie können es in jquery-Objekt konvertieren und das Notwendige tun. –

-1
$("body").find('#box-' + number).find('a').click(function(){ 
    alert('boop'); //function 
}); 

Die Sache ist, hat jQuery geladen DOM, bevor das Feld erzeugt wird. Unter der Annahme, diesen Code in Ihrem $ (document) .ready (function()), Ihre Boxen sind noch nicht erzeugt wird, wenn das Dokument fertig ist. Sie müssen zum übergeordneten Element "#box" wechseln, das am Anfang generiert wurde (es muss nicht body sein)

+0

Dies funktioniert nicht. Sie delegieren das Ereignis nicht, sondern binden es nur an Elemente an, die zum Zeitpunkt der Erstellung des Ereignisses vorhanden sind, unabhängig davon, ob Sie ein vorhandenes Element wie "body" verwenden, um sie zu finden. [Hier ist ein Beispiel.] (Https://jsfiddle.net/9f6qbnvb/2/) (Ich habe die Lösung in diesen Link eingefügt, die * Event Delegation *, wie Milind Anantwar oben gepostet.) – Santi

Verwandte Themen