使用event-map动态绑定.on()方法

我正在使用此语法来确保事件绑定动态添加的li元素

 $('ul.list').on('click', 'li', function() { //do something }); 

我尝试用这样的事件映射存档相同的内容:

 $('ul.list').hammer({ css_hacks : false }).on({ swipe : function(event){ //do something }, doubletap : function(event){ //some more code } }, 'li'); 

但它根本不起作用。 如果我将事件直接绑定到li元素,它适用于现有元素,但不适用于动态添加的元素。

 $('ul.list').find('li').hammer({ css_hacks : false }).on({ swipe : function(event){ //do something }, doubletap : function(event){ //some more code } }); 

如何将事件映射绑定到未来的元素?

带有2个参数的on()与旧的bind()function相同。

如果你想让它像live()一样工作,那就像第一个例子中那样传递第三个参数。

此外,如果你在hammer()方法上链接函数时遇到麻烦,请检查它并确保它返回“this”。

 $('ul.list').on({ swipe : function() { ... }, doubletap : function() { ... } },'li'); 

如果你看看jquery文件, jquery live

它说, 不支持链接方法。 例如,$(“a”)。find(“。offsite,.external”)。live(…); 无效,无法按预期工作。

所以你可以这样做:

 $('ul.list > li').hammer({ css_hacks : false }).live({ swipe : function(event){ //do something }, doubletap : function(event){ //some more code } }); 

但它已被弃用,我认为你的第一个例子应该有效。

我试过这个:

 
  • aaa
  • bbb

 $("ul").on({ click:function(){ $(this).html('clicked'); }, dblclick:function(){ $(this).html('double clicked'); } },'li'); 

它有效,所以我想你的问题可能是事件的名称。