委托自我事件

时间:2012-06-19 15:05:41

标签: javascript jquery event-delegation

我正在编写一个委托插件的事件,需要4个参数:

  • context =字符串选择器
  • 子元素=字符串选择器
  • event = String
  • fn =要调用的函数

如果父元素存在于DOM中,则插件必须将事件委托给子元素 到目前为止一直很好......

当context元素与子元素相同时,问题出现。委托不再有效,因为它希望孩子成为上下文的孩子。

以下是失败的示例输入:

  • context =“ul”
  • child element =“ul.active”
  • event =“click”

你不能$('ul').on('click', 'ul.active', fn()),因为有时'ul.active'将与'ul'相同。

我能想到的一个解决方案可能是:

var $context = $('ul');
$(document).on('click', 'ul.active', function(e){
   var $target = $(e.target);
   if($target.is($context) || $target.closest($context).length){
      fn()
   }
})

我想知道在绑定委托事件并将它们适当地绑定到情境之前检查'is child == context'是否更好

1 个答案:

答案 0 :(得分:0)

我不是说这是一个很好的解决方案,但这是我能想到的唯一方法,不是委托给$(document)

var parent = 'ul';
var child = 'ul.active';

$(parent).on('click', child, function() {
    console.log('ul.active clicked')
})​;

$(child)
    .filter(function(){
        return $(this).parents(parent).length == 0;
    })
    .on('click', function() {
        console.log('ul.active clicked')
    });​

你可能可以更好地完成这些条件 - 只需按照我的想法输入:)