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

时间:2014-09-13 19:23:26

标签: jquery hammer.js

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

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

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

但是我无法弄清楚如何在Hammer v2.0中做到这一点。 (根据新语法,我已将touch更改为tap

2 个答案:

答案 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元素。