意外的javascript输出

时间:2015-03-25 21:36:14

标签: javascript html checkbox

我有很多动态生成的表行,通常采用以下

的形式
<td class="seatClass" >
    <label for="C" class="label-format" >
        <span > C0</span >
    </label >
    <input type = "checkbox" id = "C" name = "seats[US57][]" style = "display: inline-block;" value = "C"  class="terminalCheckbox" onchange = "parentNode.querySelector('span').classList.toggle('green');" />
</td>

基本上,我的代码在不同的行中显示了很多标签和复选框。如果X代表复选框,你可以想象这样的东西

LX IX DX JX
OX PX IX DX 
BX AX WX QX

现在有时这些行包含相同的标签,例如我出现在第一行和第二行中,两者的代码几乎相同(因为它们的id和名称的值是动态的)。

无论如何,我面临着一个奇怪的问题。如果你选中一个复选框,我希望它的相关字母变为绿色,因此我添加了一些javascript。这很好用。但是,我的问题是我点击第二行的字母I(而不是复选框)。如果我这样做,则检查第一行中I的复选框,并将第一行中的I变为绿色。所以检查一个复选框的东西工作正常,但是如果我点击一个字母的东西搞砸了。

有没有理由看我的代码为什么会发生这种情况?我没有其他的javascript,我只能认为这是因为标签和复选框正在其他行上复制,但它仍然让我感到困惑,为什么会发生这种情况。

由于

1 个答案:

答案 0 :(得分:2)

请注意,ID 是唯一的。

不是指定for属性,而是使用标签包装输入。这使得无需知道嵌套控件的确切ID。

&#13;
&#13;
.green{
  color:green;
  }
&#13;
<table>
  <tr>
<td class="seatClass" >
    <label class="label-format" >
        <span > C0</span >
   
    <input type="checkbox"  name="seats[US57][]" style="display: inline-block;" value="C"  class="terminalCheckbox" onchange="parentNode.classList.toggle('green');" />
       </label >
</td>
    </tr>
  <tr>
<td class="seatClass" >
    <label class="label-format" >
        <span > C0</span >
   <!-- note: change the onchange javascript to match the new layout.
       The label will now be the parent of the input. -->
    <input type="checkbox"  name="seats[US57][]" style="display: inline-block;" value="C"  class="terminalCheckbox" onchange="parentNode.classList.toggle('green');" />

       </label >
</td>
    </tr>
  </table>
&#13;
&#13;
&#13;