2012-02-23 6 views
1

скажем на HTML документа, у меня есть куча ссылок, как так:JQuery не .live называется

<a href="#path" class="the_link_1">Click here 1</a> 
<a href="#path" class="the_link_2">Click here 2</a> 
<a href="#path" class="the_link_3">Click here 3</a> 
<a href="#path" class="the_link_4">Click here 4</a> 
etc... 

У меня есть JQuery код, как это:

$("a[class^=the_link_]").each(function(){ 

    $(this).live("click", function(){ 

     alert($(this).html()); 

    }); 

}); 

Почему этот рабочий, когда я используйте $(this).click(function(){ ... });, но он не работает, когда я использую $(this).live("click", function(){ ... });?

Спасибо

+1

Вы должны понимать, как работает '.live()' перед его использованием. Затем, как только вы это поймете, вы должны прекратить использовать его. –

ответ

6

.live странно, и работает только с селекторов. Под этим я имею в виду $('div').live работ и $(div).live нет.

Кроме того, при применении обработчика кликов к нескольким элементам не требуется .each. $("a[class^='the_link_']").click работает должным образом.

Ваш код должен быть:

$("a[class^='the_link_']").live("click", function(){ 
    alert($(this).html()); 
}); 

UPDATE: На JQuery 1.7, .live() является устаревшим, используйте вместо .on().

$(document).on('click', "a[class^='the_link_']", function(){ 
    alert($(this).html()); 
}); 

Примечание: Если все <a> теги находятся в одном контейнере, вы можете заменить $(document) с этим контейнером (как долго он всегда в DOM).

EDIT: Вам действительно нужно использовать .live здесь? Он используется для привязки события к элементам, даже если они добавлены в DOM позже. Если вы никогда не добавить больше <a> тегов через JavaScript, то просто это сделать:

$("a[class^='the_link_']").click(function(){ 
    alert($(this).html()); 
}); 
+1

И он устарел после 1.7 в пользу 'on' –

+0

@jk .: Я добавил, что :-) –

+0

Я НЕ использую jQuery 1.7, я на jQuery 1.4.2 – user765368

0

Какой версию JQuery вы используете? Если вы используете 1.7.x - метод .live() устарел. См. official jQuery documentation.

Тем не менее, вы можете попробовать метод .На:

$(this).on('click', function(){ .... } 
+0

Я НЕ использую jQuery 1.7, я нахожусь в jQuery 1.4.2 – user765368

1

Вы забыли апострофы вокруг the_link_. И это слишком сложно.

Просто держать его просто:

$("a[class^='the_link_']").live("click", function(){ 
     alert($(this).html()); 
});​ 

live осуждается, кстати, так как JQuery 1.7. Вместо этого используйте on.

$(document).on("click", "a[class^='the_link_']", function(){ 
    alert($(this).html()); 
});​ 

Демо здесь: http://jsfiddle.net/Sfsdx/

.on() – jQuery API

Улыбнись! :)

+0

'$ (" a [class^= 'the_link _'] "). On (" click "' не совпадает с '$ (" a [class^= 'the_link _'] "). live (" click "'. –

+1

'$ (" a [class^= 'the_link _'] "). on (" click "' связывается с элементами, находящимися в DOM. '$ (document) .on ('click', "a [class^= 'the_link _']" '- это способ привязки к элементам, добавленным в будущем. –

+0

true story! updated. – papaiatis

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