jQuery Delegate - Найти объект делегата внутри закрытия события - PullRequest
1 голос
/ 16 сентября 2011

Как я могу получить доступ к делегированному объекту внутри обработчика события делегата? Надеюсь, пример прояснит мой смутный вопрос.

$parent.delegate('a.some_class', 'click', someHandler);

function someHandler(e) {
  //how do I find $parent here?
}

Это частично объясняется тем, как я структурировал мой конкретный файл .js, где объявления отделены от реализации (да, старый skool, я знаю).

В someHandler e.target и $ (this) ссылаются на объект a.some_class. У e также есть ссылка на $ parent? Если нет, каков рекомендуемый способ поиска $ parent?

Спасибо за любую помощь.

Ответы [ 3 ]

4 голосов
/ 16 сентября 2011

ОБНОВЛЕНИЕ : Там есть способ получить оригинальный элемент - e.originalEvent.currentTarget:

$parent.delegate('a.some_class', 'click', someHandler);

function someHandler(e) {
  var originalParent = $(e.originalEvent.currentTarget);
}

DEMO : http://jsfiddle.net/pjHQ6/


Оригинальный ответ:

Я бы, наверное, сделал это так:

$parent.delegate('a.some_class', 'click', someHandler);
function someHandler(e) {
  var parent = $(this).parent();

  // Or if $parent isn't the immediate ancestor of the links:
  var parent = $(this).closest('.parentClass');
}
2 голосов
/ 16 сентября 2011

Глупый я.Должен был лучше прочитать документы jQuery.

Это должно сделать это:

$parent.delegate('a.some_class', 'click', $parent, someHandler);

function someHandler(e) {
  var parent = e.data;
}

e.data (в SomeHandler) всегда указывает на eventData, если используется этот вызов делегата.1007 *

Надеюсь, это кому-нибудь поможет.

1 голос
/ 28 января 2013

Дженс Роланд прав. Чтобы добавить, e.currentTarget должен был дать вам $ parent, где событие фактически обрабатывается. Есть ошибка, которая объясняет, почему currentTarget не работает так, как он должен http://bugs.jquery.com/ticket/11756

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...