JQuery – 每个会话运行一次

我有一个由“计算”按钮触发的function

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

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

这将打开一个Magnific Popup。 一旦执行此function(弹出窗口打开),如果再次按下“计算”按钮,我不想再次打开弹出窗口。

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我无法理解。 我知道JQuery中有一个“东西”,但不明白如何使它工作。

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

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

工作方案:

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

如果您只想在每个浏览器会话中执行此行一次,则可以使用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; } 

尝试

编辑,v2

我读到了.one但是无法弄明白:( ……我实际上只需按下CALCULATE按钮就可以运行一次。 – 屋面计算器

HTML

  

JS

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

V1

 $("a.popup-with-form").one("click", function(e) { // do stuff, once // ieg, // `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/

请在下方使用。

disableOn

空值

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

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

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