如何使用元素的id在Meteor.js中触发事件

时间:2013-05-28 05:28:43

标签: javascript dom javascript-events meteor

我目前正在使用Meteor 0.6.3

使用“id”作为选择器的以下方案不起作用:

模板:

<template name="menu">
    <div>
        <button id="showmap" class="btn-primary">Show map</button>
    </div>
</template>

JS:

Template.menu.events({
  'click #showmap' : function () {
      alert("test");
  }
});

如果我使用'class'而不是'id',一切正常:

模板:

<template name="menu">
    <div>
        <button class="btn-primary showmap">Show map</button>
    </div>
</template>

JS:

Template.menu.events({
  'click .showmap' : function () {
      alert("test");
  }
});

我见过几个人使用'id'作为选择器的例子。那么我可能做错了什么?

2 个答案:

答案 0 :(得分:2)

我尝试了你的代码,它不像你说的那样工作。奇怪的是,类选择器的事件也不起作用。但是,我添加了很多软件包,所以如果其中一个软件包干扰我就不会感到惊讶。

我在SO上发现了这个非常相似的问题: Setting simple events in meteor

因此,您可能希望搜索错误报告并将其发布(如果尚未发布)。 https://github.com/meteor/meteor/issues

最好的解决方法可能是使用class作为选择器,然后针对event.currentTarget.id进行测试,{{1}}应该点击该元素的id。

答案 1 :(得分:1)

我使用属性。 ID对我来说似乎也不起作用。例如:

<button data-do-something>
  Click Me
</button>


'click [data-do-something]': function(eventArgs, template){

}

关于属性的好处是你还可以为属性赋值,并将它们与事件一起使用。例如:

<button data-do-something="hello">
  Click Me
</button>


'click [data-do-something]': function(eventArgs, template){
    var data = eventArgs.target.getAttribute('data-do-something');
    if(data === 'hello') console.log('found hello!");
}