2012-05-23 1 views
3

У меня есть следующие:Если я добавляю анонимную функцию jQuery ко многим элементам, она повторяется много раз?

$('#menu a[href^="/C"], #menu a[href^="/Test"], #menu a[href^="/T"]') 
     .live('click', function (event) { 
..... 
..... 
     }); 

Он смотрит на каждого из адреса меню ссылок, а затем добавляет функцию к каждому. Однако функция, отмеченная символом ....., составляет около двадцати строк, и у меня есть до ста адресных ссылок.

При кодировании таким образом это означает, что все эти двадцать строк добавляются к каждой из сотен ссылок? Должен ли я изменить это, чтобы использовать именованную функцию или анонимная функция, созданная с именем, сгенерированным системой, и не хранилась внутри каждой ссылки?

ответ

4

Вы используете функцию делегирования, поэтому событие привязывается только к document. Итак, нет, эти двадцать строк связаны только в одном месте.

Используйте метод delegate или метод on, .live амортизируется в новых версиях jQuery и неэффективен.

$("#menu").delegate('a[href^="/C"], a[href^="/Test"], a[href^="/T"]','click',function(){...}); 

или

$("#menu").on('click','a[href^="/C"], a[href^="/Test"], a[href^="/T"]',function(){...}); 

Если вы используете очень старую версию JQuery и должны использовать .live, попробуйте этот синтаксис вместо этого, он является немного более эффективным для USECASE, однако должны быть в пределах $ (документ) .ready()

$('a[href^="/C"], a[href^="/Test"], a[href^="/T"]','#menu').live('click',function(){...}); 
+1

Старые версии JQuery должны иметь 'delegate' и документацию JQuery на«живой»также утверждает, использовать' delegate' в старой версии JQuery вместо '' live' и on' in более новая версия, 1.7 и более поздняя, ​​я думаю. – Nope

+1

У jQuery 1.2 и 1.3 не было '.delegate', но да' .delegate' или '.on' - это путь. 1.3 все еще довольно распространено печально. –

+0

Ницца, не знал jQuery, что далеко назад. Документы говорят только до 1.7. Опять же, хороший. Это очень важно знать, если вы используете 1,3 или более старых. – Nope

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