2013-01-07 7 views
7

Ich habe diesen einfachen Code. http://jsfiddle.net/borth/BmEZv/ Wenn Sie einmal auf den Link klicken, funktioniert es gut. Wenn Sie es ein zweites Mal anklicken, funktioniert es nicht. Da der HTML-Code nach dem Laden des DOM in HTML geladen wird, habe ich .on, .bind, .delegate und .live ausprobiert. Keine von ihnen funktioniert außer .live, die veraltet ist (ich benutze jquery 1.7.2).Alternative zu jquery leben, die funktionieren kann

Kann jemand erklären, warum .live ist die einzige Funktion, die funktioniert und warum die anderen nicht funktionieren (oder wenn ich etwas falsch mit den anderen Funktionen mache).


$(document).ready(function(){ 
    $(".OpenPopup").bind('click', function(e){ 
     alert('test .OpenPopup'); 
     // do something 
     return false; 
    }); 
    $(".EditIcon").bind('click', function(){ 
     alert('test .EditIcon'); 
     // do something 
     $("#ABC").html('<div class="EditIcon OpenPopup" pwidth="800" pheight="500" ptitle="EditText">click here again</div>'); 
    }); 
}); 


<div id="ABC"><div class="EditIcon OpenPopup" pwidth="800" pheight="500" ptitle="EditText">click here</div></div> 
+2

'.On' ist die offizielle Ersatz für' .Live' –

+2

die jQuery docs FAQ Antwort zu lesen 'why' – charlietfl

+0

Ich habe es mit .on zu arbeiten(). Ich hatte die falsche Syntax. –

Antwort

16
$(document).ready(function(){ 
     $(document.body).on('click', ".OpenPopup", function(e){ 
      alert('test .OpenPopup'); 
      // do something 
      return false; 
     }); 
     $(document.body).on('click', ".EditIcon", function(){ 
      alert('test .EditIcon'); 
      // do something 
      $("#ABC").html('<div class="EditIcon OpenPopup" pwidth="800" pheight="500" ptitle="Edit Text">click here again</div>'); 
     }); 
    }); 
+0

wow Ich habe nie auf diese Art. Ich bin immer noch auf der Suche nach einer alternativen Art von .Live in der letzten jQuery Build. Gibt es eine offizielle Erklärung? Danke für Snippet Ich werde dieses testen. –

+1

Aber wie zielen Sie darauf ab. OpenPopup, auf das geklickt wurde? – PixMach

+0

'e.target' im Click-Handler - [jQuery event.target doc] (https://api.jquery.com/event.target/) –

2

.on()with or without delegation können verwendet werden, ist unten ein Beispiel für ein() Delegation verwenden.

$("#ABC").on('click', ".OpenPopup", function(e){ 

http://jsfiddle.net/BmEZv/1/

+0

Dies funktioniert nicht. Es funktioniert beim ersten Klick wie erwartet, aber beim zweiten Klick registriert es nur die erste Warnung mit .on(). $ (". EditIcon"). Bind ('click', function() { wird nicht gefeuert. Ich habe es auch mit .delegate() versucht. –

+0

@BrandonOrth willst du, dass ich den gesamten Code für dich neu schreibe ?, ändere einfach die zweite Bindung zu 'on()' – Musa

+0

Ich habe dein Beispiel modifiziert, um .on() zum .EditIcon Klick hinzuzufügen. Works. Danke. –

0

@Dhofca Danach wirklich funktioniert. Ich zeige nur ein Beispiel, das ich mit 'diesem' Schlüsselwort versucht habe.

$(document.body).on('click', ".query-result table tr", function() { 
    var el = $(this); 
    el.closest('table').find('tr').removeClass('dotted'); 
    el.addClass('dotted'); 
});