2011-01-13 4 views
1

Ich habe einfachen HTML-Markup:Wie speichern wir Event-Handler, wenn wir neues HTML für Element setzen?

<div id="cont">Some text here 
    <div class="wrap" style="border: 1px solid black;display: inline;"> block element here 
    </div> and another text</div> 

Und jQuery-Code:

$(function(){ 
    $(".wrap").click(function(){ 
     $("#cont").html($("#cont").html().replace(/text/g, "letter")); 
    alert("Click!"); 
    }); 
    $("#d1").click(function(){ 
    alert("#d1 clicked!"); 
    }); 
}); 

Ich erwarte, dass Click-Ereignis jedes Mal, wenn Sie durch die #d1 div angeklickt werden, ausgelöst wird, aber wenn wir geklickt von .wrap Es ist wieder Feuer. Ich verstehe, warum es solches Verhalten hat, aber wie man es löst?
In meinem Code kann ich Click-Ereignis für #d1 nach $("#cont").html($("#cont").html().replace(/text/g, "letter")) nicht festlegen, da ich jetzt nicht zur Ausführungszeit, wenn Ereignis festgelegt wurde.
Sie können versuchen, Beispiel auf JSBin

Vielen Dank für die Antworten, live() ist eine sehr nützliche Funktion.

Antwort

3

DEMO:http://jsbin.com/aqono4/4/edit

Wenn Sie den Zustand Ihrer Elemente nicht sicher sind Sie immer live können Ihre Veranstaltungen zu binden:

$(function(){ 
    $(".wrap").live('click', function(){ 
     $("#cont").html($("#cont").html().replace(/text/g, "letter")); 
     alert("Click!"); 
    }); 
    $("#d1").live('click', function(){ 
     alert("#d1 clicked!"); 
    }); 
}); 

mit dem live method gebunden Veranstaltungen wird gilt immer noch für Instanzen gefunden nach der Code wird zunächst aufgerufen.

DEMO:http://jsbin.com/aqono4/4/edit

+0

Ist es möglich, .live() und .one() Ereignis-Setter zu kombinieren? Ich möchte Ereignishandler mit .live() festlegen, aber es muss nur einmal ausgelöst werden. – Kai

+0

@Kai Nicht sicher, aber Sie könnten '$ (this) .die ('click')' 'am Ende der Handler-Funktion setzen. –

+0

Ich finde nette Lösung von @Nick Craver hier - http://Stackoverflow.com/questions/3796207/using-one-with-live-jquery – Kai

1

Sie sollten mit der Methode live() binden.

$(function(){ 
    $(".wrap").live("click", function() { 
    // .... 
1

GvS Wie gesagt, das Ereignis binden. Wenn Sie es nicht brauchen, können Sie losbinden.

Verwandte Themen