2017-07-27 57 views
1

我有此代码,其获得所述类被点击超链接和切换的播放暂停图标超链接中的一个特定的div变量的值。我与JavaScript逻辑的一个问题:保留在随后的功能

var mediaClicked_class = ""; 
 
var previousMediaClicked_class = ""; 
 
var pauseIconStatus = null; 
 

 
// Get class of clicked hyperlink 
 
function mediaClick_class(clicked_class) { 
 
    alert(pauseIconStatus + " : Initial pause Icon status"); 
 
    mediaClicked_class = clicked_class; // when i click map hyperlink, pass respective class into variable 
 

 
    preEmptivePlay(mediaClicked_class, pauseIconStatus); 
 
} 
 

 
function preEmptivePlay(mediaClicked_class, pauseIconStatus) { 
 
    if (pauseIconStatus == null) { //global var. init. 
 
    //toggle class of currently clicked div.icon 
 
    $("div.icon_" + mediaClicked_class).toggleClass("playicon pauseicon"); 
 

 
    var pauseIconAvailability = $("div.icon_" + mediaClicked_class).hasClass("pauseicon"); 
 

 
    if (pauseIconAvailability) { //true - playing 
 
     pauseIconStatus = 1;; //pause icon is active i.e. song is playing 
 
     previousMediaClicked_class = mediaClicked_class; //store current class to be called later 
 
     alert(pauseIconStatus + " : Current icon status"); 
 
    } else { //false - not playing 
 
     pauseIconStatus = 0;; //pause icon is inactive i.e. song is not playing 
 
     previousMediaClicked_class = mediaClicked_class; 
 
     alert(pauseIconStatus + " : Current icon status"); 
 

 
    } 
 
    } 
 
}

的问题是,当我点击超链接,这个函数被调用,而第四行初始化,而不是保留pauseIconStatusnull每次,在随后的调用中可能的值为0。

我在哪里可以声明这个变量初始化为null,然后在随后的调用中重新初始化呢?

+0

你的逻辑看起来不错。没有看到一个可行的例子,很难说出了什么问题。控制台中是否有错误?你看到任何'alert()'? –

+0

@RoryMcCrossan,一个函数的诅咒,其参数以全局再次敲击命名! =)(它花了我几次运行,因为它最终点击那就是它) – Rob

+0

@Rob很好被发现 - 我完全错过了:) –

回答

1

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

你可以看到这个通过加入这一行明确发生:

alert(pauseIconStatus + " : After preEmptivePlay pause Icon status"); 

mediaClick_class,你叫preEmptivePlay后,你会看到pauseIconStatus价值如何为空再次因为你里面preEmptivePlay所做的更改永远不要离开功能。

如果更改mediaClick_class所以它有这个代替:

pauseIconStatus = preEmptivePlay(mediaClicked_class, pauseIconStatus); 

,改变preEmptivePlay使最后一行(添加)是:

return pauseIconStatus; 

您应该看到pauseIconStatus将停止第一个点击后的点击次数为null

也可能是,根据mediaClick_class被调用的方式,还需要将return false;添加到点击处理程序的末尾,否则单击超链接将导致页面重新加载,例如,如果你的页面叫做default.html中和链接看起来是这样的:

<a href="default.html" id="myLink"><div id="icon_thing">Text</div></a> 

click事件你线式需要是这个样子:

$("#myLink").on('click', function() 
{ 
    mediaClick_class('thing'); 

    return false; 
}); 
+0

看看Rob的大脑!罗布显然抢劫了另一个人的大脑,因为现在,他有两个人。竖起大拇指! – Reeyona

+1

@Reeyona,heh,很高兴我可以帮忙=)为什么它值得,考虑改变'preEmptivePlay'上的参数名 - 让一个名字与全局相同的参数是一个非常糟糕的主意......就像你见过! =) – Rob