【问题标题】:How to store a value generated in a while loop to a variable for later use in JQuery如何将while循环中生成的值存储到变量中以供以后在JQuery中使用
【发布时间】:2015-04-05 21:24:12
【问题描述】:

下面的代码由“mousemove”事件执行:

$("div").on("mousemove", function( event ) {
    var k = 0;
    var x = 0;
    while(k<y){
        k++;
        x = k;
    }
}

问题是一旦循环已经运行并停止,并且鼠标从当前位置移动了一个像素,并且碰巧没有满足条件,我失去了k++的值,即var x = k;相反,var x 被重置为 0(零),就像在循环之前一样。我需要保留var x = k++ 的值以供以后使用,即使在光标移动后也是如此。

请指教。谢谢。

【问题讨论】:

    标签: javascript jquery while-loop onmousemove


    【解决方案1】:

    存储此类值的最佳位置是元素的数据属性。假设您的页面上有多个 div 元素,您当前的设置要求您为每个 div 拥有一个唯一变量:

    $('div').on('mousemove', function( e ) {
        var k = $(this).data('k') || 0;
        //......
        $(this).data('k', +k+1);
        console.log( $(this).data('k') );
    });
    

    $('div').on('mousemove', function( e ) {
            var k = $(this).data('k') || 0;
            //......
            $(this).data('k', +k+1);
            console.log( $(this).data('k'), this );
        });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <div class="div1">DIV 1</div>
    <div class="div2">DIV 2</div>
    <div class="div3">DIV 3</div>

    【讨论】:

      【解决方案2】:

      制作x 全局变量。

      var x = 0;
      $("div").on("mousemove", function( event ) {
        k = 0;
        while(k<y){
         k++;
         var x = k;
        }
      }
      

      variables scope

      【讨论】:

        【解决方案3】:

        只需将循环外的变量存储在全局范围内,循环退出后它会保持状态。

        【讨论】:

          【解决方案4】:

          现在,每次触发“mousemove”时,您的事件处理程序都会将 k 和 x 设置为 0。在事件处理程序之外声明 x 以保存 x 的值。

          var x = 0;
          $('div').on('mousemove', function(event){
            // the rest of your code goes here
          }
          

          【讨论】:

            【解决方案5】:

            只要确保你在循环外给变量 x 赋值,这样你就可以在循环退出时保留 x 的新值。

            注意:通过删除 x 之前的“var”,确保循环内的 var x 是全局 x,如下所示。这样,x 的值就可以在循环之外和任何包装循环的函数中使用。

            var x = 0;
            
            $("div").on("mousemove", function( event ) {
            var k = 0;
              while (k<y){
                k++;
                x = k; //Note that it's "x=k" and not "var x = k". This makes x global
                }
              }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2022-06-28
              • 1970-01-01
              • 2022-12-20
              • 2022-08-12
              • 2021-11-09
              • 2022-07-21
              • 1970-01-01
              相关资源
              最近更新 更多