【问题标题】: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
}
}