2010-12-19 15 views
1

ich benutze jquery und ajax.jquery und ajax problem

Ich habe einige divs mit ids wie id = "apple-23", id = "apple-45" und ...

Ich habe einige jQuery-Code wie folgt aus:

$("[id^=apple]").click(function(){ 
    elid = $(this).attr('id').split("-"); 
    pid = elid[1]; 
    alert(pid); 
}); 

die Code funktioniert gut für diese divs.

aber die Ajax gibt auch ähnliche Divs mit ähnlichen ID-Muster wie ID = "Apple-61" und etc. aber der Jquery-Code funktioniert nicht für diese Ajax produziert divs.

warum ist es so? und wie kann ich es lösen?

+0

Haben Sie ein gemeinsames Elternteil für diese divs? – sje397

Antwort

3

Sie können entweder .delegate() oder .live() Ereignisse auf Elemente zu behandeln, die noch nicht existieren.

Wenn diese divs ein gemeinsames Elternteil haben, ist es effizienter, .delegate() anstelle von .live() zu verwenden (siehe here).

$("#divContainer").delegate("[id^=apple]", "click", function(){ 
    elid = $(this).attr('id').split("-"); 
    pid = elid[1]; 
    alert(pid); 
}); 
+0

Also wenn ich ein Elternteil für sie mit Delegate() haben ist schneller als Live()., Da Live angefügt an das Dokument und überprüfen Sie das gesamte Dokument zu erkennen übereinstimmende Elemente, sondern delegate() nur einige spezifische Elemente überprüfen, um passende Elemente zu finden Event.ist es richtig? –

+0

@hd: Ja, so verstehe ich es. Von diesem Link ruft "delegate" tatsächlich "live" auf, begrenzt jedoch seinen Gültigkeitsbereich auf den Container, während "live" von sich aus nur an das Dokument delegiert wird. – sje397

5

Das Problem besteht darin, dass Sie das Ereignis binden, bevor die Elemente vorhanden sind.

Verwenden live statt (vorausgesetzt, Sie jQuery verwenden 1.3+):

$("[id^=apple]").live("click", function(){ 
    elid = $(this).attr('id').split("-"); 
    pid = elid[1]; 
    alert(pid); 
});