2014-02-17 4 views
-2

Я борюсь с этим кодом:JQuery «* на клик функции *»

После выбора элемента HTML, а затем применяя на функции мыши что цель tr.

$("#dataTable tbody").on("click", "tr", function() { 
    alert($(this).text()); 
}); 
+3

Посмотрите на делегированные события в jQuery api http://api.jquery.com/on/ –

+0

здесь вы делегируете событие click от TR до уровня tBODY –

ответ

0

Цель TR заключается в определении того, что вы будете щелкая в селекторе #dataTable tbody. Попробуйте изменить его на что-то еще и посмотреть, как он ведет себя по-другому.

0

Там тонкое различие между:

$("#dataTable tbody tr").on("click", callback); // 1 

и

$("#dataTable tbody").on("click", "tr", callback); // 2 

Первый выбирает каждый tr и вызывает addEventListener по каждому в отдельности.

Второй добавляет только один, специальный прослушиватель событий к элементу tbody. Всякий раз, когда что-то внутри кликается, этот прослушиватель проверяет, является ли он tr, а затем делегирует событие указанному обратному вызову.

Это дает 2 практические различия:

  • Один слушатель добавляется, вместо того, чтобы потенциально очень много (что может повысить производительность в некоторых случаях),
  • если добавить еще tr s динамически в будущем, они также будут реагировать на click, как и следовало ожидать.
0

События bubble. Это главное, что вам нужно понять. Если пользователь нажимает на a Внутри p Внутри td внутри tr внутри table (и так далее), событие щелчка будет пузыриться каждый из этих элементов и вызвать все click слушателей событий, в свою очередь.

$("#dataTable tbody").on("click", "tr", function() { 

Это выбирает #dataTable tbody элемент для прикрепления слушателя событий, но он будет фильтровать и реагировать только на события, вызванные вложенной tr. Вы также можете сделать это вместо:

$("#dataTable tbody tr").on("click", function() { 

Но это было бы связать много слушателей отдельного события для каждого tr. Это может быть намного более неэффективным или иметь другие нежелательные эффекты; например, если вы продолжаете добавлять или удалять элементы tr, вы можете столкнуться с некоторыми tr s, которые имеют прослушиватели событий, привязанные к ним и другим без.

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