- ベストアンサー
idの振り直しについて
お世話になります。 下記のように行数が10行のテーブルがあります。 <table id="tbl1"> <tr> <td>1</td><td><input type="text" id="txt1"></td> </tr> <tr> <td>2</td><td><input type="text" id="txt2"></td> </tr> 省略 <tr> <td>10</td><td><input type="text" id="txt10"></td> </tr> </table> 削除ボタンを押下すると1行目をdeleteRow()で削除し、 連番とテキストフィールドのidを1から振り直すようにしてあります。 ここまでは問題なく動作しますが、submit直前の入力チェック で下記のようにしてもidが1,1,2,3,4,5,6,7,8のように取得されます。idの振り直しは出来ないのでしょうか。 ブラウザはIE6を使用しています。 よろしくお願いします。 var vRows = document.getElementById("tbl1").rows.length; for (var vIndex = 1; vIndex <= vRows; vIndex++) { if (document.getElementById("txt" + vIndex).value) == "") { alert("未入力項目があります。"); } }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> idの振り直しは出来ないのでしょうか。 できますよ。 > var vRows = document.getElementById("tbl1").rows.length; > for (var vIndex = 1; vIndex <= vRows; vIndex++) { > if (document.getElementById("txt" + vIndex).value) == "") { > alert("未入力項目があります。"); > } > } この部分を見る限り問題はなさそうなので、 削除の時にtxt1が2つ残るように削除しているか、 idの振り直しの時にtxt1が2つ作られていると思います。 削除の方法、IDの振り直しの方法を見直してみてはいかがでしょうか。
その他の回答 (1)
- yutuo
- ベストアンサー率50% (4/8)
ソースの中で、insertRow()がありますか。 ないの場合、ソースは以下に修正: var vRows = document.getElementById("tbl1").rows.length; for (var vIndex = 1; vIndex <= vRows; vIndex++) { var txtbox = document.getElementById("txt" + vIndex) if (txtbox && txtbox.value == "") { alert("未入力項目があります。"); } } そして、JavaScriptエラーがない。 idの振り直しも出来できます。でも、難しいです。
お礼
ご回答ありがとうございます。 idの振り直しは可能ということで 元のソースをもう一度、一つ一つチェックした所 原因がわかりました。 実は質問の際に元のソースをかなり省略してしまったのですが 下記のようにid属性とname属性の値が同じだったためこのような 現象になりました。 ありがとうございました。 <td>1</td><td><input type="text" id="txt1" name="txt1"></td>
お礼
ご回答ありがとうございます。 idの振り直しは可能ということで 元のソースをもう一度、一つ一つチェックした所 原因がわかりました。 実は質問の際に元のソースをかなり省略してしまったのですが 下記のようにid属性とname属性の値が同じだったためこのような 現象になりました。 ありがとうございました。 <td>1</td><td><input type="text" id="txt1" name="txt1"></td>