JQuery - 每个会话运行一次

Lev*_*hik 3 javascript jquery

我有一个由"计算"按钮触发的功能

我需要这个行每个会话只运行一次(会话可能是1天或直到重新加载浏览器).

$('.popup-with-form').magnificPopup('open');
Run Code Online (Sandbox Code Playgroud)

这将打开一个Magnific Popup.一旦执行此功能(弹出窗口打开),如果再次按下"计算"按钮,我不想再次打开弹出窗口.

JS/JQuery代码:

function StateChanged() {
       if (XmlHttp.readyState == 4 || XmlHttp.readyState == "complete") {
           $('.popup-with-form').magnificPopup('open');
          document.getElementById("CalcSum").innerHTML = XmlHttp.responseText;
          document.getElementById("CalcSumPopup").innerHTML = XmlHttp.responseText;
       }
    }
Run Code Online (Sandbox Code Playgroud)

PS我知道很多这些问题都出现了,我尝试了不同的做事方式,但由于我是"代码挑战"并且不了解JQuery或JS我无法弄明白.我知道有一个.一是在JQuery中的"东西",但不知道如何使它发挥作用.

我真的很赞赏任何帮助.谢谢!

更新问题由@MarcoBonelli回答 - 谢谢!

工作方案:

if (!sessionStorage.alreadyClicked) {
    $('.popup-with-form').magnificPopup('open');
    sessionStorage.alreadyClicked = "true";
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*lli 14

如果您希望每个浏览器会话只执行一次此行,则可以使用sessionStorage.当您设置变量时,sessionStorage它会保持其值直到浏览器关闭(例如,直到您关闭Google Chrome).

所以你可以这样做:

if (!sessionStorage.alreadyClicked) {
    $('.popup-with-form').magnificPopup('open');
    sessionStorage.alreadyClicked = 1;
}
Run Code Online (Sandbox Code Playgroud)

要小心,sessionStorage因为它只能存储string值.

如果您希望每个页面会话只执行一次该行(这意味着每次页面刷新一次),那么您可以使用任何变量并将其设置为true以记住您已执行该行:

if (!window.alreadyClicked) {
    $('.popup-with-form').magnificPopup('open');
    alreadyClicked = true;
}
Run Code Online (Sandbox Code Playgroud)

  • 什么是“字符串”值?我为什么要小心?(抱歉 - 我知道这是个愚蠢的问题......但我是一个试图编写代码的屋顶工:) (2认同)
  • @RoofingCalculator 在第一种方式中,您将变量存储在 sessionStorage 中,因此一旦执行该行,它将存储它,并且,鉴于 sessionStorage 仅在您 **关闭** 浏览器时重置,因此该行在您关闭之前不会执行并重新打开浏览器。在第二种方式中,您将变量保存在 window 对象上,该对象仅在页面会话期间存在,因此如果您关闭页面(而不是浏览器)并稍后重新打开它,变量将不再存在并且代码行将被执行。 (2认同)