我有一个名为“products”的数组变量(来自后端)。它具有以下结构:
- 产品
-----特殊
---------- 0
--------------- ID
---------------价格
---------------等.....
---------- 1个
--------------- ID
---------------价格
---------------等
---------- 2..etc
我正在使用百里香。我试图在javascript中循环“特殊产品”并尝试使用它们的索引来获取子数据(id,price等)。 我试图使用一个名为“counter”的新整数变量来访问索引。所以我的代码是:
<script th:inline="javascript" th:with="setProducts=(${products.special})">
function LetsSayLoop() {
var counter = 0;
//looping through some checkboxes
$('#checkboxContainer .checkboxesClassName').each(function() {
if($(this).is(":checked")) {
//this is working:
var current_product_price = [[${setProducts[0].price}]];
//this is also working:
//var current_product_price = [[${setProducts[1].price}]];
//etc...
//this is not working:
var current_product_price = [[${setProducts[counter].price}]];
counter++;
}
});
}
</script>
我的IDE(netbeans)说没有使用变量“counter”。生成的Javascritp和HTML也以以下结尾: 有什么想法吗?
var current_product_price =
编辑:关于javascript循环的小补充:
//[[${#lists.size(setProducts)}]] outputs the desired integer;
for (i = 0; i < [[${#lists.size(setProducts)}]]; i++) {
//this is working:
console.log([[${setProducts[0].price}]]);
//this is not:
console.log([[${setProducts[i].price}]]);
}
编辑:(可能答案?)var current_product_price = [[${setProducts[counter].price}]];
代码期望变量“counter”来自百里香。 我需要使用索引来做,但使用局部变量它不起作用。我可以增加一些本地js变量来完成这个吗?或者是其他方式?
答案 0 :(得分:1)
如果您为jquery.each
更改forEach
,它应该有效。这里有一个例子
function a() {
var counter =0;
[1, 2, 3, 4].forEach(function(e){
console.log('Element:', e);
console.log('Counter:', counter++);
});
}
a();
答案 1 :(得分:1)
代码对我来说很好, 所以它应该工作。
如果唯一的问题是您在IDE上看到的警告,我不会担心,这可能是一个错误。
但是,您不需要使用计数器,您可以使用.each使用的内置变量:
.each(function( index, element ) {
//Use index instead of counter.
}
编辑:
好的,我想我现在明白了这个问题:
你不能在这种表达式中使用javascript变量。将其分解为两个 - 首先从数组中创建一个js变量,然后像这样使用[index]:
function LetsSayLoop() {
var current_Products = [[${setProducts}]]; //btw not sure about double brackets
//looping through some checkboxes
$('#checkboxContainer .checkboxesClassName').each(function(index) {
if($(this).is(":checked")) {
//this should work:
var current_product_price = current_Products[index];
//etc...
}
});
}
答案 2 :(得分:0)
我还没有发表评论,所以我会发布一个答案。
请将此行添加到each
来电,并告诉我们计数器是否实际在each
范围内可用且已更新。接下来,您将知道实际调用它的次数。
alert("Counter val: " + counter.toString());