我正在编写一个需要 4 个参数的事件委托插件:
- 上下文 = 字符串选择器
- 子元素 = 字符串选择器
- 事件 = 字符串
- fn = 要调用的函数
如果父元素存在于 DOM 中,那么插件必须将事件委托给子元素。
当上下文元素与子元素相同时,就会出现问题。委托不再起作用,因为它期望传递的孩子是上下文的孩子。
这是一个失败的示例输入:
- 上下文 = “ul”
- 子元素 = “ul.active”
- 事件 = “点击”
你不能这样做,$('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'是否更好,并将它们适当地绑定到情况