脚本标签的本地变量在EJS标签中不起作用

时间:2018-09-22 13:41:53

标签: javascript node.js ejs

HTML:

<% for (let i = 0; i < monthlyTopSellers.imageUrlList.length; i++){ %>

<button id="test<%= i+1 %>">Buy Now</button>

<% } %>

<script>
    for (let i = 0; i < 10; i++){
        $('#test'+i.toString()).click(function () {
            let item = <%= items[i] %>
            // Then I just will use item variable
        }
    }
</script>

给我一​​个错误,说未定义'i',在此代码中'let item = <%= items [i]%>'。有什么解决方法或其他方法可以解决这个问题。

2 个答案:

答案 0 :(得分:1)

Ejs不会运行循环for (let i = 0; i < 10; i++)(客户端),它只会在您的<% %>内部以循环运行

您可以在itemsClient之前用items创建for (let i = 0; i < 10; i++)

并在该循环中使用itemsClient

<% for (let i = 0; i < monthlyTopSellers.imageUrlList.length; i++){ %>

<button id="test<%= i+1 %>">Buy Now</button>

<% } %>

<script>
let itemsClient = <%- JSON.stringify(items) %>;
for (let i = 0; i < 10; i++){
    $('#test'+i.toString()).click(function () {
        let item = itemsClient[i];
        // Use item (itemsClient[i])
    }
}
</script>

您可以对其进行测试。

答案 1 :(得分:-1)

首先,您应该将i count数组作为json对象从node.js传递给ejs。 然后,您在ejs中获得该变量。 而且您可以将此foreach语句用于ejs。

<% monthlyTopSellers.imageUrlList.forEach(function(imgurl, index){ %>
    <button id="test<%=index %>">Buy Now</button>
<% }); %>