使用javascript

时间:2018-01-02 14:27:41

标签: javascript thymeleaf

我有一个名为“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}]]);
}
编辑:(可能答案?)
我知道百里香叶不能识别[[]]范围内的局部javascript变量。例如:

var current_product_price = [[${setProducts[counter].price}]];

代码期望变量“counter”来自百里香。 我需要使用索引来做,但使用局部变量它不起作用。我可以增加一些本地js变量来完成这个吗?或者是其他方式?

3 个答案:

答案 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());