如何在委托的jQuery的.on()中包含所选元素?

时间:2013-07-09 02:03:15

标签: jquery delegation event-delegation

我正在使用jQuery的.on()和一个选择器来委托一组经过筛选的后代,如下所示:

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

在这种情况下,将clickHandler函数绑定到任何具有“数据单击”属性(具有任何值)的后代上的单击事件。

如果selectedElement本身具有“数据单击”属性,则它不受约束。我不能使用所选元素的父元素,因为它包含我不想要绑定的其他子元素。这个绑定发生在一个接收selectedElement作为参数的函数中,所以我不知道它是什么类型的元素或者我将用它来选择它的选择器。我宁愿不必单独绑定所选元素。

有没有办法将所选元素本身包含在由.on过滤和约束的集合中?

2 个答案:

答案 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变量。

答案 1 :(得分:0)

我只是单独绑定它们,但如果你坚持,你可以将它们绑定到父节点并修改你的选择器只包含容器本身或其后代之一:

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

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

这是小提琴:http://jsfiddle.net/e4tDL/