Meteor:在点击事件中将类添加到表元素中
Meteor: adding a class to a table element on a click event
我有一个包含一些表行的表,因此我创建了一个单击事件,当单击特定的td
元素时,它会更新myCollection
,这很好。我想做的是显示一个引导程序"勾号",以显示单击时该元素是"活动的"。
如果我在控制台上运行$('.activate').addClass('glyphicon glyphicon-ok');
,它会将类添加到具有.activate
类的所有元素中,而不是触发事件的元素。我也可以从下面的函数中运行这一行,得到相同的结果。
使用以下代码,我似乎根本无法做到这一点:
'click .activate': function (event, template) {
var id=event.target.getAttribute("data-id");
myCollection.update({_id: id}, {$set: {status: "active"}});
// I've tried variations of the line below with no success
$(this).closest("td").addClass("glyphicon glyphicon-ok");
}
此外,当页面重新加载时,我希望在正确的位置显示"勾号"。我不知道怎样做才是最好的。我不能这样做,例如:
{{#each myCollection}}
{{#if status=="active"}}
<p>display stuff</p>
{{/if}}
{{/each}}
你知道我该怎么做吗?
提前感谢:)
在事件处理程序内部,this
是被单击的元素的上下文,而不是元素本身。更"迅速"的方法是使用反应性而不是jQuery来更新DOM。
<template name="table">
{{#each myCollection}}
{{> tr}}
{{/each}}
</template>
<template name="tr">
<td class="activate">Activate</td>
<td>
{{#if active}}
<span class="glyphicon glyphicon-ok"></span>
{{/if}}
</td>
</template>
Template.table.myCollection = function () {
return myCollection.find();
};
Template.tr.active = function () {
return this.status === "active";
};
Template.tr.events({
'click .activate': function (event, template) {
myCollection.update(this._id, {$set: {status: "active"}});
}
});
如果你正在处理一个持久状态(这里似乎是这样),Neil的答案是正确的。
如果你只是需要一些临时的UI效果,你可以使用以下jQuery:
$(event.target).addClass("glyphicon glyphicon-ok");
(与您尝试的代码几乎相同,但使用$(event.target)
而不是$(this)
)
相关文章:
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 如何使用jquery遍历具有动态添加元素的数组
- jQuery appendTo 替换元素而不是添加元素,如果正在添加的元素预先存在于列表中
- 如何使用jquery添加元素
- 动态添加元素上的 HammerJS
- CSS没有'使用javascript向页面动态添加元素时无法工作
- 使用Javascript在DOM元素中添加元素
- 在添加元素时激发JS事件
- 什么's是在IE8+中添加元素的最有效方法
- d3.js在添加元素时协调
- 使用路由器链接动态添加元素
- 动态添加元素
- 在页面内容完全加载后,使用jQuery在DOM中添加元素
- j查询绑定单击不添加元素
- 在循环 jQuery 上添加元素
- 从一个页面调用 javascript 函数以在第二个页面上添加元素
- 页面加载后向<正文>添加元素时出现问题
- 动态添加元素时刷新 HTML
- 动态添加元素时不触发 JQuery 事件
- 如何使用 JavaScript 获取动态添加元素的宽度