你如何在hammer.js 2.0版中委托事件?

在hammer.js v1.x(使用jquery插件)中,您可以委托这样的事件:

$('ul').hammer().on("touch", "li", callback); 

使用此语法,您可以将事件侦听器附加到ul而不是您要侦听的单个li元素。 这将允许您动态地将li元素添加到ul而无需重新附加事件侦听器。

但是我无法弄清楚如何在Hammer v2.0中做到这一点。 (我根据新语法改变了touch tap )。

对于速度,锤子现在默认激活配对事件。 但是,您可以通过打开domEvents设置来重新启用事件委派:

 $('ul').hammer({domEvents:true}).on("tap", "li", callback); 

我问了一个没有答案的类似问题(用jquery hammer.js 2和事件委托长按(按住) )。

我最终检查了事件目标。 这有点烦人,因为这意味着你不能使用一些更高级的选择器和额外的工作,但如果你从目标跑到你的根/父,你应该抓住你想要的。 你不能只看li,如果你把其他元素放在li里面,因为那时目标可能就是div。

我用这个函数:

 function _isDelegate(selector, target, currentTarget) { var delegate = null; while (target && target != currentTarget) { delegate = $(target).filter(selector)[0]; if (delegate) return delegate; target = target.parentNode; } return delegate; } 

selector是您的委托选择器,例如“li”。 target是同名事件对象中给出的元素。 如果你碰到了正确的话,应该是李或其中一个孩子。 currentTarget是您实际注册侦听器的父/根元素。

如果您没有触摸li,则返回将为null ,因此您可以忽略该事件,或者如果您触及或在其中,它将是li元素。