意外的 javascript 输出
Unexpected javascript output
我有很多 table 动态生成的行,它们通常采用以下形式
<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代表checkbox,你可以想象成这样
LX IX DX JX
OX PX IX DX
BX AX WX QX
现在有时这些行包含相同的标签,例如我出现在第一行和第二行中,两者的代码几乎相同(因为它们的 ID 和名称的值是动态的)。
无论如何,我遇到了一个奇怪的问题。如果你选中一个复选框,我希望它的相关字母变成绿色,因此我添加了 javascript 位。这很好用。但是,我的问题是我点击了第二行的字母 I(不是复选框)。如果我这样做,第一行中 I 的复选框将被选中并且第一行中的 I 变为绿色。所以选中一个复选框一切正常,但如果我点击一个字母,事情就搞砸了。
是否有任何理由查看我的代码以了解为什么会发生这种情况?我对此没有其他 javascript,我只能认为这是因为标签和复选框被复制到其他行,但它仍然让我感到困惑,为什么会发生这种情况。
谢谢
请注意,ID 必须是唯一的。
不指定 for
属性,而是用标签包装输入。这使得无需知道嵌套控件的确切 ID。
.green{
color:green;
}
<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>
我有很多 table 动态生成的行,它们通常采用以下形式
<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代表checkbox,你可以想象成这样
LX IX DX JX
OX PX IX DX
BX AX WX QX
现在有时这些行包含相同的标签,例如我出现在第一行和第二行中,两者的代码几乎相同(因为它们的 ID 和名称的值是动态的)。
无论如何,我遇到了一个奇怪的问题。如果你选中一个复选框,我希望它的相关字母变成绿色,因此我添加了 javascript 位。这很好用。但是,我的问题是我点击了第二行的字母 I(不是复选框)。如果我这样做,第一行中 I 的复选框将被选中并且第一行中的 I 变为绿色。所以选中一个复选框一切正常,但如果我点击一个字母,事情就搞砸了。
是否有任何理由查看我的代码以了解为什么会发生这种情况?我对此没有其他 javascript,我只能认为这是因为标签和复选框被复制到其他行,但它仍然让我感到困惑,为什么会发生这种情况。
谢谢
请注意,ID 必须是唯一的。
不指定 for
属性,而是用标签包装输入。这使得无需知道嵌套控件的确切 ID。
.green{
color:green;
}
<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>