TypeError例外:ラジオボタン[i]には定義されていません

キャサリンPerovic:

私は、各ラジオボタンの入力から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>

TJクラウダー:

私が見ることができる2つの問題があります。

  1. getElementsByTagName返すライブコレクションを。あなたが(例えば、それらを動かすことによって)の要素に影響を与える方法でDOMを変更した場合、その変更はコレクションに反映されています。

    あなたはそれをしたくない場合は、取得NodeListからquerySelectorAll代わりに(document.querySelectorAll("input"); NodeList。sが、スナップショット、ライブではないのコレクションであるか、あなたはjQueryのを使用していることから、(jQueryのセットを使用します$("input")。)また、スナップショットです。

    それはあなたのコードをより詳しく見て、私はあなたがコレクションに影響を与える何かをやっているとは思わない、と述べました。

  2. あなたは、使用している<= radioButton.lengthだけではなく、< radioButton.lengthあなたは行くべき0による< radioButton.lengthあなたはjQueryのセットを使用する場合は、その使用することができますeach代わりにする方法を。あなたが使用している場合NodeListからquerySelectorAll現代の環境では、(あなたがいる場合や、それをポリフィル)には、その使用することができるforEach方法を。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=347543&siteId=1