为具有相同id的所有元素初始化Hammer.js

时间:2015-05-04 05:48:22

标签: jquery html hammer.js

我想使用锤子js为类似的帖子构建一个双Tab手势。 Html:

<div class="gitem-wrap row">
      <div class="gitem">
        <div class="well">
            <figure id="img-item"><img src="images/2.jpg" class="img-responsive"></figure>
            <article>
                ...
            </article>
        </div>
      </div>
      <div class="gitem">
        <div class="well">
            <figure id="img-item"><img src="images/2.jpg" class="img-responsive"></figure>
            <article>
                ...
            </article>
        </div>
      </div>
</div>

Js初始化Hammer js:

var myElement = document.getElementById('img-item');
var mc = new Hammer(myElement);
mc.on("doubletap", function() {
    //myElement.toggleClass('liked');
    console.log('Double tap!');
    return false;
  });

它只适用于第一个元素,但不适用于所有元素 如何为具有相同ID的所有元素初始化Hammer js?

JSFIDDLE http://jsfiddle.net/ekdfokc5/

感谢您的帮助。它在hammer.js v1的工作很棒 http://jsfiddle.net/ekdfokc5/3
 但在新版本(2.0.4)中存在问题,并且{double}后$('figured').toggleClass('liked')无效。
http://jsfiddle.net/ekdfokc5/4

1 个答案:

答案 0 :(得分:5)

重复ID被视为无效(并非良好做法)。 ID应该是唯一的。使用其他方法,如class / TagName。

MDN source : Element.id在文档

中必须是唯一的
$('figure').each(function(){   //tagname based selector
    var mc = new Hammer(this);
    mc.on("doubletap", function() {
        console.log('Double tap!');
        alert('Double tap!');
        //$(myElement).toggleClass('liked');
        return false;
    });
});

<强> Updated Fiddle

提供jQuery解决方案,因为您已经标记了jQuery

或者,按类替换重复的ID,并使用基于类的选择器。

<figure class="img-item">
$('.img-item').each(function(){
    var $this = $(this);
    var mc = new Hammer(this);
    mc.on("doubletap", function() {
        console.log('Double tap!');
        alert('Double tap!');
        $this.toggleClass('liked');
        return false;
    });
});

$(this).toggleClass('..')的小提琴不起作用,因为this中的on()指的是锤子对象,而不是当前对象。