Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.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_Scope_Global Variables - Fatal编程技术网

Javascript 在后续函数中保留变量的值

Javascript 在后续函数中保留变量的值,javascript,jquery,scope,global-variables,Javascript,Jquery,Scope,Global Variables,我有这段代码,它获取单击的超链接的类,并切换该超链接中特定div的播放和暂停图标。我对Javascript逻辑有一个问题: var\u class=”“; var previousMediaClicked_class=“”; var pauseIconStatus=null; //获取已单击超链接的类 函数mediaClick\u类(clicked\u类){ 警报(PauseConstatus+“:初始暂停图标状态”); mediaClicked_class=clicked_class;//单

我有这段代码,它获取单击的超链接的类,并切换该超链接中特定div的播放和暂停图标。我对Javascript逻辑有一个问题:

var\u class=”“;
var previousMediaClicked_class=“”;
var pauseIconStatus=null;
//获取已单击超链接的类
函数mediaClick\u类(clicked\u类){
警报(PauseConstatus+“:初始暂停图标状态”);
mediaClicked_class=clicked_class;//单击映射超链接时,将相应的类传递给变量
抢先播放(MediaU类,暂停状态);
}
功能抢先播放(MediaU类,暂停状态){
如果(pauseIconStatus==null){//global var.init。
//切换当前单击的div.icon的类别
$(“div.icon_uu”+mediaClicked_u类)。切换类(“playicon pauseicon”);
var pauseIconAvailability=$(“div.icon”+mediaClicked\u class).hasClass(“pauseicon”);
如果(暂停可用){//true-播放
PauseConstatus=1;;//暂停图标处于活动状态,即正在播放歌曲
previousMediaClicked\u class=mediaClicked\u class;//存储要稍后调用的当前类
警报(PauseConstatus+“:当前图标状态”);
}否则{//false-不玩
PauseConstatus=0;;//暂停图标处于非活动状态,即歌曲未播放
previousMediaClicked\u类=mediaClicked\u类;
警报(PauseConstatus+“:当前图标状态”);
}
}

}
这里的问题是您将
PauseConstatus
作为参数传递给函数
preEmptivePlay
,这意味着您所做的更改不会在该函数之外看到

通过添加以下行,您可以清楚地看到这种情况:

alert(pauseIconStatus + " : After preEmptivePlay pause Icon status");
进入
media,在调用
preEmptivePlay
后立即单击\u class
,您将看到
pauseConstatus
的值如何再次为空,因为您在
preEmptivePlay
中所做的更改从未离开该函数

如果更改
media,请单击\u class
,使其具有以下内容:

pauseIconStatus = preEmptivePlay(mediaClicked_class, pauseIconStatus);
同时更改
preEmptivePlay
,使最后一行(添加)为:

您应该看到,对于第一次单击之后的单击,
pauseConstatus
将不再为
null

也可能是,根据调用
mediaClick_class
的方式,还需要添加
returnfalse到单击处理程序的末尾,否则单击超链接将导致页面重新加载,例如,如果您的页面被称为default.html,并且链接看起来像这样:

<a href="default.html" id="myLink"><div id="icon_thing">Text</div></a>
$("#myLink").on('click', function ()
{
    mediaClick_class('thing');

    return false;
});

你的逻辑看起来不错。如果看不到一个有效的例子,很难说出哪里出了问题。控制台中是否有任何错误?你看到任何
alert()
?@RoryMcCrossan,一个以全局参数命名的函数的诅咒再次袭来!=)(我运行了好几次,它终于点击了这个按钮)@Rob-well-spotting-我完全错过了:)看看Rob身上的大脑袋!罗布显然抢走了另一个人的大脑,因为现在,他有两个。竖起大拇指@Reeyona,HEH,很高兴我能帮助=)对于它的价值,考虑改变参数的名称在“代码>抢先播放< /代码> -有一个参数命名为与全球一样是一个非常坏的想法…如您所见!=)
$("#myLink").on('click', function ()
{
    mediaClick_class('thing');

    return false;
});