JavaScript:For循环传递变量
JavaScript: For-Loop passing variables
我遇到一个问题已经有一段时间了,找不到任何解决方案。尽管我已经在stackoverflow上读过这个问题和答案,但我还是不知道出了什么问题。可能是因为缺乏良好的英语。所以德国的答案是受欢迎的。
然而,我正在尝试将一个变量传递到for循环之外的另一个函数中。这是我的代码:
"use strict";
// gobal vars
var sort = new Array();
$(document).ready(function(){
// Sortable.js
// Copyright 2013-2015 Lebedev Konstantin <ibnRubaXa@gmail.com>
// http://rubaxa.github.io/Sortable/
var min = 2,
max = 5,
elems = new Array();
elems[0] = document.getElementById("left");
elems[1] = document.getElementById("center");
elems[2] = document.getElementById("right");
for(var i=0, len=elems.length; i<len; i++) {
var amnt = elems[i].getElementsByTagName("div").length,
group = "gewicht";
if (amnt <= min) {
group = {name: "gewicht", pull: false, put: true};
} else if (amnt >= max) {
group = {name: "gewicht", pull: true, put: false};
}
sort[i] = Sortable.create(elems[i], {
group: group,
animation: 150,
ghostClass:"ghost",
draggable: ".draggable",
onSort: function(evt) {sortEnd(evt, i, min, max)}
})
}
});
function sortEnd(evt, j, min, max) {
var targ = evt.target,
amnt = targ.getElementsByTagName("div").length;
console.log(j);
amnt = targ.getElementsByTagName("div").length;
if (amnt <= min) {
sort[j].option("group", {name: "gewicht", pull: false, put: true});
} else if (amnt > max) {
sort[j].option("group", {name: "gewicht", pull: true, put: false});
} else {
sort[j].option("group", {name: "gewicht", pull: true, put: true});
}
}
问题出现在onSort: function(evt) {sortEnd(evt, i, min, max)}
,其中for循环中的变量i将为0、1和2。但在循环之外,函数sortEnd()
中的console.log()
会返回3。
一个我能理解的解释会很好,解决我的问题会更好,两者都是最好的。
感谢
对于链接的问题,您需要将您的操作包装在一个函数中:
(function(group, i) {
sort.push(Sortable.create(elems[i], {
group: group,
animation: 150,
ghostClass:"ghost",
draggable: ".draggable",
onSort: function(evt) {sortEnd(evt, i, min, max)}
}))
}(group, i));
否则,group
和i
的每个实例都将引用相同的值。
此外,使用数组时,请使用push
,而不是直接设置ID。
问题是您的i
变量被捕获,然后它的值发生了变化。对此最好的解决方案是IIFE(立即调用的函数表达式):
for (var i = 0, len = elems.length; i < len; i++) {
..
(function(val) {
sort[val] = Sortable.create(elems[val], {
group: group,
animation: 150,
ghostClass:"ghost",
draggable: ".draggable",
onSort: function(evt) {sortEnd(evt, val, min, max)}
});
})(i);
}
相关文章:
- 如何在Javascript函数调用中循环变量
- Jquery-每个循环不更新变量
- 如何将while循环中生成的值存储到变量中,以便以后在JQuery中使用
- 如何在AngularJS-ng重复循环中将长JSON路径缩短为变量
- 在javascript函数的循环中设置全局布尔变量的最佳语法
- 使用javascript使用for循环声明变量
- Coffeescription:循环中的条件变量未正确声明
- 当JSON数据=变量时,需要执行循环
- Javascript'数组'和'循环'如何“;变量[i]”;是一个条件
- for 循环和 if 语句,获取变量并存储它
- JavaScript-用for循环项声明变量
- 将值添加到相同的变量循环jQuery中
- 在JSON变量循环中获取最近5年的日期
- Javascript变量循环
- 使用Google Maps v3中的一个变量(循环、闭包)将事件侦听器附加到一组标记上
- 动态变量循环
- 使用变量&循环创建"onclick"功能
- 以选择器作为变量循环.append()
- 使用webaudioapi和jquery的变量+循环
- 倒计时变量循环和显示数组