Javascript .单击事件的每个令人困惑的行为
我对javascript的foreach行为感到非常困惑, 我正在使用.each jquery设置一些事件侦听器:Javascript .单击事件的每个令人困惑的行为,javascript,jquery,html,Javascript,Jquery,Html,我对javascript的foreach行为感到非常困惑, 我正在使用.each jquery设置一些事件侦听器: $(".xRibbonMenu").each(function(index){ ribbonMenu= new RibbonMenu($(this)); $(this).find(".xRibbonTab").each(function(index){ ribbonMenu.tabs.push($(this)); $(this).cl
$(".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的方法,您知道;) 在
ribbonMenu
之前添加var
:var-ribbonMenu=new-ribbonMenu($(此))代码>。。。如果没有,则ribbonMenu
将是一个全局变量,因此在所有迭代中共享。哦,太简单了,我感到惭愧:)谢谢:)