.每个令人困惑的行为点击事件

.each confusing behavior for click event

本文关键字:事件      更新时间:2023-09-26

我对javascript的foreach行为感到非常困惑,我使用jquery的。each来设置一些事件监听器:

$(".xRibbonMenu").each(function(index){
    ribbonMenu= new RibbonMenu($(this));
    $(this).find(".xRibbonTab").each(function(index){
        ribbonMenu.tabs.push($(this));
        $(this).click(function(){
            ribbonMenu.div.find(".xRibbonTabActive").removeClass("xRibbonTabActive");
            $(this).addClass("xRibbonTabActive");
            ribbonMenu.div.find(".xRibbonContentActive").removeClass("xRibbonContentActive");
        });
    });
    $(this).find(".xRibbonContent").each(function(index){
        ribbonMenu.contents.push($(this));
    });
    RibbonMenus.push($(this));
});

但是如果事件被调用,ribbonMenu似乎总是循环的最后运行之一。我不知道其他语言中有这种行为。我做错了什么?

正如@Karl提到的,您需要将var添加到变量中,如下所示:

var ribbonMenu= new RibbonMenu($(this));

这样做的原因是因为在javascript中,当你不显式地声明一个变量为局部时,它是全局的;您需要对此非常小心,因为这肯定会导致bug,如您所知;)