2010-11-20 3 views
3

Я пытаюсь использовать делегат для вызова функции, когда нажимает определенный набор ссылок. Я уже использовал его на другой странице. Там он работал. Но на этот раз я даже не смог найти, где проблема.jQuery делегат не работает?

Мои ссылки были динамически, они выглядит как

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

И функция делегат JQuery является,

$(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:

Я пробовал обе версии, но я не в состоянии заставить его работать!

$("#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); 

Приведенный выше код находится в $(document).ready(function(){});. Это верно?? Я также пробовал, поставив их в отдельный файл js. Я не могу заставить его работать.

Любое представление о моей проблеме !!!

ответ

5

Если это ваш фактический код, вы пытаетесь передать выражение функции до его инициализации.

Reverse их, и это должно работать:

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: Не работает. Я также устал использовать '.live()'. Его тоже не работает. Это имеет смысл для вас !!! В любом случае, я обновил свой вопрос с результатами 'try'. –

+0

@CS 1.6 - Элемент '# albumHolder' также динамически создан? Кроме того, есть ли вероятность использования старой версии jQuery в этом проекте? – user113716

+0

# @ patrick dw: Да! –

4

Перед определением вы используете выражение функции. Это не работает. Либо используйте объявление регулярной функции (function loadAlbum() { /* ... */ }), либо определите this.loadAlbum (this.loadAlbum = function() { /* ... */ }), прежде чем использовать его в вызове delegate().

+0

Я попробовал. Это не работает для меня. Я обновил вопрос с результатами. –

Смежные вопросы