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

标签 javascript jquery scope global-variables

我有这段代码,它获取被点击的超链接的类并切换该超链接内特定 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");

    }
  }
}

问题是当我点击超链接时,这个函数被调用,第四行每次都将pauseIconStatus初始化为null,而不是保留可能的值0随后的电话。

我在哪里可以声明此变量以初始化为 null,然后在后续调用中取消重新初始化?

最佳答案

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

您可以通过添加以下行来明确地看到这种情况发生:

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

在您调用 preEmptivePlay 后立即进入 mediaClick_class,您将看到 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;
});

关于javascript - 在后续函数中保留变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45353408/

相关文章:

用于在构建期间替换变量引用的 Javascript 预处理器

javascript - 如何根据数组中的值自动选择复选框?

javascript - 如何将 jQuery 事件处理程序应用于多个缓存选择器?

c - 从 block 外访问 block 内自动变量的内存?

jquery - Facebook 对于电子邮件和生日返回未定义

开源项目中的C99混合声明和代码?

javascript - 为什么将 AngularJS 指令限制为类是不好的?

javascript - HTML/Javascript Resizer 小工具在 Chrome 中无法正常工作

javascript - react : HTML not rendering correctly

jquery - 如何从 jQuery 发送 ajax put 请求