jQuery - использование области селектора в качестве параметра функции для привязки событий - PullRequest
0 голосов
/ 27 апреля 2011

Я применяю некоторые события щелчка ко всем якорям в сетке.

У меня есть ajax, который обновляет строку в сетке.

Вместо того, чтобы снова применять события ко всей сеткеЯ хочу просто применить к обновленной строке ajax, поэтому я передаю область видимости функции связывания:

function bindEvents(scope)
{
 scope.find("a").click(function() { //do something });
}

function gridLoad()
{
 ..
 bindEvents($);
}

function ajax()
{
 ..
 bindEvents($(tr));
}

Я получаю ошибки, жалобы на объект не поддерживает событие click.

Дефо работало, когда код был просто

$("a").click(function() { //do something });

, добавляя .each после того, как поиск не дал результата.

Есть ли лучшая практика для этого?

1 Ответ

1 голос
/ 27 апреля 2011

Используйте .live() или .delegate(), и вам не нужно будет повторно привязывать обработчик.Это более эффективно, чем привязка обработчика для каждого <a>, так как есть только один прослушиватель событий выше дерева DOM.

Live: Присоедините обработчик ксобытие для всех элементов, которые соответствуют текущему селектору, сейчас и в будущем.

Делегат: Присоедините обработчик к одному или нескольким событиям для всех элементов, которые соответствуют селектору, сейчас или вбудущее, основанное на определенном наборе корневых элементов.

Один раз, когда документ готов, например:

$('#grid-id a').live('click', function ()
{
    // do something
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...