私は、各ラジオボタンの入力からIDを取得する必要があり、単純なJSコードを持っているし、各ラジオボタンに同じIDを持つラベルを作成します。コードは動作しますが、タイトルに書かれたように私は、エラーメッセージを取得しています。どのようにそれを取り除くには?
そして、私は同様の質問がすでにあります見ましたが、それはまったく私の問題を解決していませんでした。
function addLabels() {
var radioButton = document.getElementsByTagName("input");
for (var i = 0; i <= radioButton.length; i++) {
var radioButtonId = radioButton[i].id;
var label = "<label for='" + radioButtonId + "'></label>";
$(label).insertAfter(radioButton[i]);
}
}
addLabels();
<div class="slider-nav">
<input type="radio" name="slider-button" id="radio-button0">
<input type="radio" name="slider-button" id="radio-button1">
<input type="radio" name="slider-button" id="radio-button2">
</div>
私が見ることができる2つの問題があります。
getElementsByTagName
返すライブコレクションを。あなたが(例えば、それらを動かすことによって)の要素に影響を与える方法でDOMを変更した場合、その変更はコレクションに反映されています。あなたはそれをしたくない場合は、取得
NodeList
からquerySelectorAll
代わりに(document.querySelectorAll("input")
;NodeList
。sが、スナップショット、ライブではないのコレクションであるか、あなたはjQueryのを使用していることから、(jQueryのセットを使用します$("input")
。)また、スナップショットです。それはあなたのコードをより詳しく見て、私はあなたがコレクションに影響を与える何かをやっているとは思わない、と述べました。
あなたは、使用している
<= radioButton.length
だけではなく、< radioButton.length
。あなたは行くべき0
による< radioButton.length
。あなたはjQueryのセットを使用する場合は、その使用することができますeach
代わりにする方法を。あなたが使用している場合NodeList
からquerySelectorAll
現代の環境では、(あなたがいる場合や、それをポリフィル)には、その使用することができるforEach
方法を。