0

我有以下由“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++即使在光标移动后,我也需要保留 的值以供以后使用。

请指教。谢谢。

4

5 回答 5

2

存储此类值的最佳位置是元素的数据属性。假设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>

于 2015-04-05T21:49:39.047 回答
0

使x全局变量。

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

变量范围

于 2015-04-05T21:27:57.857 回答
0

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

于 2015-04-05T21:32:01.187 回答
0

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

var x = 0;
$('div').on('mousemove', function(event){
  // the rest of your code goes here
}
于 2015-04-05T21:38:38.283 回答
0

只需确保在循环外部分配变量 xa 值,以便在循环退出时保留 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
    }
  }
于 2015-04-06T07:59:09.837 回答