我如何委托这个过滤的jquery对象

时间:2016-10-26 18:28:21

标签: jquery

我有一个过滤器调用返回的这个JQuery对象,我将事件附加到这样。

  visibleCascadeParentCheckbox = $('.checkbox[data-cascade]:not(.hidden)').filter(function(){
      return !$(this).parents('td').hasClass('nested')
  });

  $(visibleCascadeParentCheckbox).on('change', function() {...});

但我需要像这样进行事件委托

 $('.table').on('click', ****selector from visibleCascadeParentCheckbox****, function() {..});

3 个答案:

答案 0 :(得分:2)

您需要在事件处理程序中执行过滤检查:

$('.table').on('click', '.checkbox[data-cascade]:not(.hidden)', function() {
    if ($(this).parents('td').hasClass('nested')) return; // exit!
    // your code...
});

注意:重复使用 visibleCascadeParentCheckbox 选项是没有用的,因为该表可能已更改,使选择过时。您不会受益于事件委派的更具动态性。

答案 1 :(得分:0)

您可以遍历visibleCascadeParentCheckbox数组中的每个元素,并获取每个元素的字符串。然后你可以获取该字符串,用逗号和句号替换空格以选择下一个类,依此类推。我们在委托点切片以删除第一个逗号。

var classes = "";
visibleCascadeParentCheckbox.forEach(function(checkbox) {
    classes = classes + ',.' + $(checkbox).prop('class').replace(' ', ',.');
});

$('.table').on('click', classes.slice(1), function() {..});

答案 2 :(得分:0)

假设你的元素有一个类,例如" someClass",那么你可以:

将数据添加到dom并添加以下代码:

$('.table').on('click', ".someClass", function() {..});