如何在循环之外的javascript中使用循环变量?
我需要能够在循环内使用变量,在脚本标记之间的javascript中使用循环外的变量。最好不要在文件中使用脚本标记,而是在开始时使用脚本标记 我有一个不起作用的:如何在循环之外的javascript中使用循环变量?,javascript,ruby-on-rails,ruby,Javascript,Ruby On Rails,Ruby,我需要能够在循环内使用变量,在脚本标记之间的javascript中使用循环外的变量。最好不要在文件中使用脚本标记,而是在开始时使用脚本标记 我有一个不起作用的: <% @line_items.each do |li| %> <button type="button" onclick="mockupColor<%= "#{li.id}" %>()"></button> <div id="tshirt-div-<%= "#{li.id}"
<% @line_items.each do |li| %>
<button type="button" onclick="mockupColor<%= "#{li.id}" %>()"></button>
<div id="tshirt-div-<%= "#{li.id}" %>">
#code
<script>
function mockupColor<%= li.id %>(){
document.getElementById("tshirt-div-<%= "#{li.id}" %>").style.backgroundColor = '#000000';
}, false);
</script>
<% end %>
虽然您可以通过在调用<代码> MoCKCu色[ >中添加适当的括号和分隔符来修复它,相反,与其使用内联处理程序(通常被认为是很差的实践),不如考虑添加数据属性,然后使用事件委派观察容器内的
按钮的单击:
<button type="button" data-color="<%= "{li.id}" %>"></button>
<div>
其中container
是按钮和div周围的容器
请注意,使用nextElementSibling
,不再需要提供
sid
s。(无论如何,最好避免使用数字索引ID)
#代码
函数模拟颜色(id){
document.getElementById(“tshirt div-”+id).style.backgroundColor='#000000';
);
您不需要循环java脚本函数。函数应该只接受JavaScript变量并将其作为java脚本处理。这是在循环内部还是在循环外部?HTML部分需要是循环的一部分,才能定义li.id
,当然,JavaScript应该在循环外部(就像在一个单独的
标记中,它只运行一次)生成的html/javascript代码是什么?为不起作用的内容添加了html代码。即使从循环中删除ID,它在循环中也不会起作用。我建议查看使用类似示例的指南。
<button type="button" class="btn btn-info" data-toggle="modal" data-color="796" data-target="#exampleModal2-796" id="#exampleModal2-796" onclick="mockupColor()">
<script>
function mockupColor() {
document.getElementById("tshirt-div-796").style.backgroundColor = '#000000';
};
</script>
<button type="button" data-color="<%= "{li.id}" %>"></button>
<div>
container.addEventListener('click', ({ target }) => {
if (!target.matches('button')) {
return;
}
target.nextElementSibling.style.backgroundColor = '#' + target.dataset.color;
});
<% @line_items.each do |li| %>
<button type="button" onclick="mockupColor(<%= "#{li.id}" %>)"></button>
<div id="tshirt-div-<%= "#{li.id}" %>">#code</div>
<% end %>
<script>
function mockupColor(id){
document.getElementById("tshirt-div-"+id).style.backgroundColor = '#000000';
);
</script>