JQuery - 每个会话运行一次

时间:2014-08-01 00:03:16

标签: javascript jquery

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

我需要此行仅在每个会话中运行一次(会话可能是1天或直到浏览器重新加载)。

$('.popup-with-form').magnificPopup('open');

这会打开一个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;
       }
    }

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

我真的很感激任何帮助。谢谢!

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

工作解决方案:

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

3 个答案:

答案 0 :(得分:13)

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

所以你可以这样做:

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

请注意sessionStorage,因为它只能存储string个值。

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

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

答案 1 :(得分:1)

尝试

编辑,v2

  

我读过.one但是无法弄明白:( ......我确实需要   它仅在按下CALCULATE按钮时运行一次。 - 屋顶   计算器

HTML

<!--  removed `action="javascript:GetInfo();"
              , accept-charset="UNKNOWN"
              , enctype="application/x-www-form-urlencoded" 
              , method="post"` 
      from `form` attributes -->
<form id="formcalc" style="text-align: left;">    
    <!-- changed `input` `type` to `button` -->
    <input name="calculate" type="button" value="Calculate" />
</form>

JS

$("#formcalc > input[name='calculate']")
.one("click", function(e) {
  e.stopPropagation();
  GetInfo();
});

V1

$("a.popup-with-form").one("click", function(e) {
  // do stuff, once
  // i.e.g., 
  // `XmlHttp.onreadystatechange = StateChanged;` at `ShowSum()`
  $(e.target).remove(); // remove element when `click`ed once
});

jsfiddle http://jsfiddle.net/guest271314/7K3tn/

请参阅http://api.jquery.com/one/

答案 2 :(得分:0)

请在下方使用。

disableOn

如果窗口宽度小于此选项中的数字 - 将不会打开灯箱,并且将触发元素的默认行为。设置为0以禁用行为。选项仅在从DOM元素初始化Magnific Popup时有效。

也可以接受Function作为参数,如果可以打开灯箱则返回true,否则返回false。例如:

disableOn:function(){if($(condition){return false;} return true;}

相关问题