2013-07-09 7 views
0

Я использую JQuery-х .on() с селектором делегировать отфильтрованный набор потомков, как это:Как включить выбранный элемент в делеризованный jQuery .on()?

selectedElement.on("click", "[data-click]", clickHandler); 

В этом случае связывание функции clickHandler на событие щелчка на любом потомке, который имеет «данные -click "(с любым значением).

Если selectedElement сам имеет атрибут «data-click», он не связан. Я не могу использовать родительский элемент выбранного элемента, потому что он содержит других дочерних элементов, которые я не хочу связывать. Это связывание происходит внутри функции, которая принимает selectedElement в качестве аргумента, поэтому я не знаю заранее, что это за элемент или какой селектор я буду использовать для его выбора. Я бы предпочел не связывать выбранный элемент отдельно.

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

+0

Короткий ответ: нет. Длинный ответ: используйте родительский элемент и измените свой селектор. –

ответ

1

Как @Joseph Silber сказал, вы не можете этого сделать. Вот то, что я хотел бы сделать в подобной ситуации:

selectedElement.on('click', function(ev) { 
    // Alternatively, you could do $(this).is('[data-click]') 
    if (ev.target.hasAttribute('data-click')) { 
     clickHandler(ev); 
    } 
}); 

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

0

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

var selector = '.container[data-click], .container [data-click]'; 

$('.parent').on('click', selector, clickHandler); 

Вот fiddle: http://jsfiddle.net/e4tDL/

+0

Я не знаю заранее, каким будет выбран выбранный элемент, поэтому я не уверен, как его выбрать из его родителя. Отредактировал мой вопрос, чтобы сделать это яснее. – Robert

+0

Тогда просто используйте решение @ kalley. –