2010-11-20 15 views
3

Ich versuche Delegat zu verwenden, um eine Funktion aufzurufen, wenn ein bestimmter Satz von Links klicken. Ich habe es schon früher auf einer anderen Seite benutzt. Es wurde dort gearbeitet. Aber dieses Mal kann ich gar nicht finden, wo das Problem liegt.jQuery Delegate funktioniert nicht?

Meine Links dynamisch generiert wurden, sieht sie aus wie

<a class="thumbLink" href="#" id="My HomeTown-1"><small>My HomeTown</small></a> 

Und die jQuery Delegatfunktion ist,

$(document).ready(function(){ 
$("#albumHolder").delegate('a.thumbLink', 'click', this.loadAlbum);//albumHolder is div ID that holds all the <a> elements 

this.loadAlbum = function(){ 
    var id = this.id; 
    var number = id.lastIndexOf("-"); 
    var alubmName = id.subString(0, number); 
    alert(albumName); 
} 
}); 

Update:

ich beide Versionen versucht, aber ich bin nicht in der Lage, es zum Laufen zu bringen!

$("#albumHolder").delegate('a.thumbLink', 'click', function loadAlbum(){ 
    var id = this.id; 
    var number = id.lastIndexOf("-"); 
    var alubmName = id.subString(0, number); 
    alert(albumName); 
}); 



    this.loadAlbum(){ 
    var id = this.id; 
    var number = id.lastIndexOf("-"); 
    var alubmName = id.subString(0, number); 
    alert(albumName); 
} 
$("#albumHolder").delegate('a.thumbLink', 'click', this.loadAlbum); 

Der obige Code ist in $(document).ready(function(){});. Ist das korrekt?? Ich habe auch versucht, indem Sie sie in eine separate js Datei. Ich kann es nicht funktionieren lassen.

Irgendeine Idee über mein Problem !!!

Antwort

5

Wenn dies die Reihenfolge Ihres tatsächlichen Codes ist, versuchen Sie, den Funktionsausdruck zu übergeben, bevor er initialisiert wurde.

sie umkehren und es sollte funktionieren:

this.loadAlbum = function(){ 
    var id = this.id; 
    var number = id.lastIndexOf("-"); 
    var alubmName = id.subString(0, number); 
    alert(albumName); 
} 
$("#albumHolder").delegate('a.thumbLink', 'click', this.loadAlbum); 
+0

# @ patrick dw: Es funktioniert nicht. Ich bin auch müde, '.live()' zu verwenden. Es funktioniert auch nicht. Macht es dir einen Sinn !!! Jedenfalls habe ich meine Frage mit den 'try' Ergebnissen aktualisiert. –

+0

@CS 1.6 - Wird das '# albumHolder' -Element dynamisch erstellt? Gibt es auch eine Chance, dass Sie eine ältere Version von jQuery für dieses Projekt verwenden? – user113716

+0

# @ patrick dw: Ja! –

4

Sie verwenden einen Funktionsausdruck, bevor Sie ihn definieren. Dies funktioniert nicht. Verwenden Sie entweder eine reguläre Funktionsdeklaration (function loadAlbum() { /* ... */ }) oder definieren Sie this.loadAlbum (this.loadAlbum = function() { /* ... */ }), bevor Sie sie in Ihrem Aufruf von delegate() verwenden.

+0

ich es versucht. Es funktioniert nicht für mich. Ich habe die Frage mit den Ergebnissen aktualisiert. –