Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在循环之外的javascript中使用循环变量?_Javascript_Ruby On Rails_Ruby - Fatal编程技术网

如何在循环之外的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}"

我需要能够在循环内使用变量,在脚本标记之间的javascript中使用循环外的变量。最好不要在文件中使用脚本标记,而是在开始时使用脚本标记

我有一个不起作用的:

<% @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
,不再需要提供
s
id
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>