Существует ли практическое правило, когда следует использовать делегирование событий по сравнению с обработкой событий в JQuery? - PullRequest
3 голосов
/ 20 июля 2009

Я не совсем понимаю, когда следует использовать делегирование событий, а не готовую обработку событий JQuery.

Я всегда испытываю желание использовать обработчик событий, потому что в JQuery это так просто:

Например:

$("button#submit").click(function () { 
      $(this).css("disabled", "true");
    });

Делегирование событий не так уж и сложно написать:

$("button#submit").live("click", function() {
      $(this).css("disabled", "true");
});

Но это не кажется таким интуитивным.

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

Ответы [ 4 ]

3 голосов
/ 20 июля 2009

Используйте .live (), когда вы будете динамически добавлять элементы на страницу, которым нужно назначить это событие. (обратите внимание, что .live () работает только с селекторами)

Используйте .click () (или любое другое событие) для всех остальных случаев

2 голосов
/ 20 июля 2009

Вы должны использовать делегирование событий в следующих ситуациях:

  • Когда вы хотите обработать одно и то же событие во многих элементах, например, если у вас есть таблица данных с большим количеством строк, использование делегирования будет использовать гораздо меньше памяти и будет быстрее, чем регистрация обработчика событий на строку.
  • Когда элементы динамически добавляются на страницу после загрузки страницы, и вы хотите обрабатывать события для этих новых элементов, например, добавление строк в таблицу данных.

Использование служебной программы событий и делегирования событий для повышения производительности обсуждает это еще немного (хотя в статье используется YUI, идеи все еще применимы).

1 голос
/ 20 июля 2009

Согласно это , это все о скорости, когда есть много связанных элементов.

0 голосов
/ 20 июля 2009

Я считаю, что я использую вживую везде, где это возможно. Таким образом, если я добавлю динамический контент позже, мне вообще не придется менять код.

...