2010-04-29 2 views
1

Я заполняю список, клонируя в него элементы. Затем я изменяю attrs, чтобы каждый элемент был уникальным. Они должны вызвать функцию мыши, так что мне интересно, если это более эффективно использовать new_element.click(func); или new_element.attr('onlick','func();');jQuery: элемент element.click (func) или element.attr ('onclick', 'func()') более эффективен?

ответ

4
new_element.attr('onclick','func();'); 

Is:

  • неэффективен (без необходимости создания нового инлайн функции из строки, которая не делает ничего, кроме FUNC вызова и потерять this ссылки);

  • усугубляет сложный код, поскольку все это должно быть строка JS, экранированная;

  • , поврежденный в IE, из-за ошибок в setAttribute.

Избегайте. click()/bind('click') есть ли причина.

+0

И он подвержен опечаткам ('onclikc') –

3

OnClick имеет ряд ограничений, в том числе загромождение DOM и позволяя только одну функцию в то время. Поэтому вы должны использовать клик. См. Quirks Mode для получения дополнительной информации.

0

Поскольку вы используете JQuery, то сделать это таким образом

new_element.click(function(){ 
    // your code 
}); 

или вы можете связать обработчик события клика, как

new_element.bind("click", function(){ 
    // your code 
}); 
+0

Спасибо, но функция уже существует и вызывается из нескольких мест. Анонимная функция не подходит для меня. – Jake

0

Любая разница в производительности между этими двумя, скорее всего, будет незначителен. Вы должны использовать тот, который читает лучше, и это element.click. (Плюс, onclick имеет много недостатков, как упомянуто @Matthew Flaschen.)

1

Непосредственно ссылка на функцию будет более эффективной, чем интерпретация строки.

Самый низкий сенсорный способ сделать это, однако, таким образом:

$(links_selector).live('click', func); 

links_selector предположительно будет что-то вроде ul.listClass a.actionClass. Это не потребует ничего, что нужно сделать, когда новые элементы списка будут добавлены.

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