我正在编写一个委托插件的事件,需要4个参数:
如果父元素存在于DOM中,则插件必须将事件委托给子元素 到目前为止一直很好......
当context元素与子元素相同时,问题出现。委托不再有效,因为它希望孩子成为上下文的孩子。
以下是失败的示例输入:
你不能$('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'是否更好
答案 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')
});
你可能可以更好地完成这些条件 - 只需按照我的想法输入:)