使用Jquery Cookie在页面刷新期间存储和更新计数器变量

时间:2019-03-12 18:20:14

标签: javascript jquery

使用.NET和C#。我正在根据条件从后面的代码中调用Javascript函数。

问题:当变量达到1以上时,我想调用一个单独的JS函数。问题在于,似乎浏览器重置了计数器变量,或者我做错了什么。

这是我第一次尝试这样做

var myFunctionCalls = 0; //To track how many times this function gets called
function TTclubConfirmUw1(){
      if(myFunctionCalls < 1){
        //Do something here
        myFunctionCalls++;
      }
      else{
        //Call another method after the variable reaches 1
        // reset myFunctionCalls back to zero  (myFunctionCalls = 0;)

}

似乎增量调用有效。正如我已经提醒看到的那样,但是在页面刷新后它并没有保留..这在后面的代码中发生了。

然后我尝试了一个jQuery Cookie。到现在为止遇到了一些错误,但是似乎我也错过了一些东西。附言我也使用了js-cookie插件。

我希望有一个每次调用某个函数时都会增加的计数器。将该计数器用于条件逻辑。

这里是我所拥有的:

  var myFuncCalls = 0;


    function ContactUW() {
     var cookies = Cookies.set("count", "myFuncCalls", {expires: 1} );

        if (cookies > 0) {
            alert(Cookies.get('count')+ "GT");
        } else {
            alert(Cookies.get('count') + "LT");
        myFuncCalls++;

        }

    }

这只是为了测试,看看我能否使它工作。永远不会..带回“ myFuncCallsLT”当我想要的是值且最终增加的值myFuncCalls

编辑---------------------------------------------- -- 在获得以下帮助之后,我想我也应该发布获得的帮助。

实际上,这确实将我要查找的值分配给了该cookie。我找到了另一个可用的解决方案(我在下面发布,但可以稍作调整就可以使用它)

我对其进行了测试,以确认它在页面刷新后是否有效。唯一的奇怪是++增量运算符将无法正常工作。因此,我已经按照您的方式向FunctionCalls添加了。

   var FunctionCalls = 0;
    window.onload = function TestTwo() {
        if (Cookies.get("count") > 0) {
            alert(Cookies.get('count') + "LT");
        } else {
            alert(Cookies.get('count') + "GT");
            FunctionCalls = FunctionCalls + 1;
                   Cookies.set("count", FunctionCalls);

        }
    }

2 个答案:

答案 0 :(得分:1)

您将cookie值设置为“ myFuncCalls”字符串,而不是实际设置该值,您需要将其更改为以下值(即,删除myFuncCalls周围的双引号):

var myFuncCalls = 0;


    function ContactUW() {
     var cookies = Cookies.set("count", myFuncCalls, {expires: 1} );

        if (cookies > 0) {
            alert(Cookies.get('count')+ "GT");
        } else {
            alert(Cookies.get('count') + "LT");
        myFuncCalls++;

        }

    }

答案 1 :(得分:0)

因此,这不能完全回答问题。具体使用JQuery cookie方法。但是,我确实发现并能够完成我想要做的事情。

回顾:我需要一种方法来有条件地确定在后面的代码中调用哪个JS函数。我试过柜台,傻瓜。甚至被会话变量搞糊涂了。没事。它要么假定它是分配的值0,要么假定它是递增的,则在刷新页面时它永远不会保持新递增的值。

因此,我使用了hiddenField .NET变量。

 <asp:HiddenField ID="hf2" runat="server" ClientIDMode="Static" />

我在后面的代码中调用此方法。

  public void TTclubMethod()
    {
        //send JS message to user. Contact underwriter first.
        bool contactUW = false;


        // determine what value #hf2 holds to determine what JS func to call
        if (hf2.Value == String.Empty)
        {
            ClientScript.RegisterStartupScript(GetType(), "hwa", "ContactUW();", true);
            string var = hf2.Value.ToString(); //Testing 
            MessageBox.Show(var); //Testing
        }
        else
        {
            //Create blank template message and update DB. 
            ClientScript.RegisterStartupScript(GetType(), "hwa", "TTclubConfirmUw();", true);


        }
    } 

初始值始终为空白。调用第一个JS函数

 function ContactUW() {
     var close = bootbox.alert({
                message: '<p class="text-center"><b>This is a TTCLUB policy. Please contact the underwriter about the renewal process. </b></p>',
                size: "large",
                closeButton: true
        });

        var hf2 = document.getElementById("hf2");
        hf2.value = 1;
    }

然后将隐藏字段值设置为1。下次我调用该C#方法时,它在逻辑上将移至下一个要调用的JS函数。

"TTclubConfirmUw();"

根据用户选择的内容,确定我将隐藏字段值保持为1还是再次将其重置为空。

我敢肯定有更多优雅的方法可以做到这一点,但这解决了这个问题并且一直有效。也许这会帮助别人。