Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的jQuery在Meteor';已呈现但不在事件中?_Javascript_Jquery_Meteor Blaze - Fatal编程技术网

Javascript 为什么我的jQuery在Meteor';已呈现但不在事件中?

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

我有一个汉堡包,当你点击它时,它会有动画。如果我把它放在onRendered部分,我可以成功地使它工作,但在events部分它将不工作。如果我尝试运行Template.events中的代码,汉堡将变得无响应

非渲染代码

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中,但是你想要
函数(事件)