在hammer.js v1.x(使用jquery插件)中,你可以委托这样的事件:
$('ul').hammer().on("touch", "li", callback);
使用此语法,您可以将事件侦听器附加到ul
,而不是您想要侦听的单个li
元素。这样您就可以动态地将li
元素添加到ul
,而无需重新附加事件侦听器。
但是我无法弄清楚如何在Hammer v2.0中做到这一点。 (根据新语法,我已将touch
更改为tap
。
答案 0 :(得分:5)
对于速度,锤子现在默认触发配对事件。但是,您可以通过打开dom Events设置启用事件委派,如下所示:
$('ul').hammer({domEvents:true}).on("tap", "li", callback);
答案 1 :(得分:0)
我问了一个没有答案的类似问题(Long press (hold) with jquery hammer.js 2 and event delegation)。
我最终检查了事件目标。这有点令人讨厌,因为这意味着你不能使用一些更好的选择器和额外的工作,但如果你从目标跑到你的根/父,你应该抓住你想要的。如果你把其他元素放在那个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
是您的代表选择方案,例如"利&#34 ;.
target
是事件对象中同名的元素。如果你碰到了正确的话,应该是李或其中一个孩子。
currentTarget
是您实际注册侦听器的父/根元素。
如果您没有触碰到li,则返回null
,因此您可以忽略该事件,或者如果您触及或在其内部,它将是li元素。