2016-04-13 5 views
1

Ich benutze den jetzt klassischen ".on" jquery-Handler, um den Klick auf einen Anker zu überprüfen, den ich mit append hinzugefügt habe.jQuery: Wie bekomme ich param vom HTML-Element, das mit .append hinzugefügt und mit .on behandelt wird?

$('#selector-to-thing-that-exists').on('click', '.thing-that-will-be-added-later', function() { 
    //I want to get the "data-pointnumber" and "data-goodanswer" on the clicked element. 
}); 

Das Problem hierbei ist, dass $ (this) geben Sie mir das $ ('# Selektor-to-Ding, dass-exists') und nicht das klickten Element (es ist ein Link). Bin ich klar genug?

$.each(this.currentQuestion.Reponse,function (arrayID,rep) { 
    $('#QuestionContainerSingle').find('.liste-boutons').append('<li><a href="" class="button-big btn-rep" data-nbpoints="'+rep.NbPoints+'" data-bonne="'+rep.Bonne+'">'+rep.Texte+'</a></li>'); 
}); 
$('#QuestionContainerSingle').on('click','.btn-rep',function (e) { 
    e.preventDefault(); 
    console.log($(this).attr('data-nbpoints')); 
}); 

Hier ist der html ... Da es Teil einer größeren Anwendung ist es nicht einfach ist einfach zu extrahieren, was ich für diese Frage brauchen!

<div class="question-content" id="QuestionContainerSingle"> 
      <div class="header-question"> 
       <p class="intitule"> 

       </p> 
      </div> 
      <div class="content"> 
       <div class="title-box">Find the best answer</div> 
       <ul class="liste-boutons"> 

       </ul> 
      </div> 
     </div> 
+0

$ (this) würde Ihnen die Klasse geben ".thing-that-wird-später hinzugefügt", nicht # Selector-to-thing-that-exists. Der zusätzliche Parameter, der zwischen click und function() übergeben wird, ist im Grunde genommen das Zielelement in # select-to-thing-that-exists. Auch, wenn Sie das HTML hinzufügen könnten, würde es helfen, das genaue Problem herauszufinden – DinoMyte

+0

Ich redigierte meine Frage mit etwas html und ändere ein wenig mein JS, um klarer zu sein ... Ich verstehe noch nicht, warum $ (dieses) tun gib mir nicht das geklickte Element ".btn-rep" zurück. Beachten Sie, dass "e.target" mir das gute Element zurückgibt! – Dantahoua

Antwort

0

Endlich finde ich den Schuldigen! Ich benutze dies.btnRep = $ ('. Btn-rep'); in der Init meiner App. Wenn ich verwende

$('#QuestionContainerSingle').on('click',**this.btnRep**,function (e) { 
    e.preventDefault(); 
    console.log($(this).attr('data-nbpoints')); 
}); 

es funktioniert nicht. Aber wenn ich

$('#QuestionContainerSingle').on('click',**'.btn-rep'**,function (e) 

es funktioniert ... Stange!

+1

Der Grund, warum es im ersten Fall nicht funktioniert, liegt darin, dass Sie ein Objekt innerhalb Ihres Selektors passieren. jquery selectors arbeitet nur mit String-Werten, nicht mit Objekten – DinoMyte