Javascript 为什么我的jQuery在Meteor';已呈现但不在事件中?
我有一个汉堡包,当你点击它时,它会有动画。如果我把它放在onRendered部分,我可以成功地使它工作,但在events部分它将不工作。如果我尝试运行Template.events中的代码,汉堡将变得无响应 非渲染代码Javascript 为什么我的jQuery在Meteor';已呈现但不在事件中?,javascript,jquery,meteor-blaze,Javascript,Jquery,Meteor Blaze,我有一个汉堡包,当你点击它时,它会有动画。如果我把它放在onRendered部分,我可以成功地使它工作,但在events部分它将不工作。如果我尝试运行Template.events中的代码,汉堡将变得无响应 非渲染代码 Template.Top_navbar.onRendered(function () { var $hamburger = $(".hamburger"); $hamburger.on("click", function(e) { $hamburger
Template.Top_navbar.onRendered(function () {
var $hamburger = $(".hamburger");
$hamburger.on("click", function(e) {
$hamburger.toggleClass("is-active");
event.preventDefault();
var el = $(this);
el.prop('disabled', true);
setTimeout(function(){el.prop('disabled', false); }, 300);
});
});
事件代码
Template.Top_navbar.events({
'click .hamburger': function (event) {
$(".hamburger").toggleClass("is-active");
event.preventDefault();
var el = $(this);
el.prop('disabled', true);
setTimeout(function(){el.prop('disabled', false); }, 300);
},
});
这就是你出错的地方
在Meteor onRendered回调中,此
引用模板实例,在events中,此
引用触发事件的元素的数据上下文。因此,此
根据使用位置的不同而有所不同
但更复杂的是,onRendered回调中的this
在jquery事件处理程序中,因此在该上下文中,它指的是DOM元素,而不是模板实例——这就是它实际工作的原因。(这是通用javascript,不是特定于Meteor的。请参阅)
为了清晰(和理智),我尽量避免使用这个
,并尽量更明确-所以你可以用$(“.hamburger”)
替换$(这个)
,函数(e)
在onRendered中,但是你想要函数(事件)