Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.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 .单击事件的每个令人困惑的行为_Javascript_Jquery_Html - Fatal编程技术网

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

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

我对javascript的foreach行为感到非常困惑, 我正在使用.each jquery设置一些事件侦听器:

$(".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
将是一个全局变量,因此在所有迭代中共享。哦,太简单了,我感到惭愧:)谢谢:)