• ベストアンサー
  • 困ってます

Java Script 買い物フォームで elements[i] が期

  • 質問No.6170220
  • 閲覧数210
  • ありがとう数6
  • 回答数3

お礼率 83% (5/6)

Java Script 買い物フォームで elements[i] が期待通り作動しません。

症状。。。Google(Chrome)では正常ですが、IE8 Firfox ブラウザでは2段目のメモリ覧でのradioボタンが作動しません。
なお、<FIELDSET><LEGEND>タグを外すと正常に作動します。
または、6より大きな数字(8など)を入れると正常作動します。iはボタン数のはずですが。。。
原因を教えてください。

THMLのリンク先です。
http://www.home.zaq.jp/tera/mitumori.html


<SCRIPT Language="JavaScript">
<!--
function calc()
{
Yen=0;
for (i=0; i<6; i++)
{
if (document.calcFORM.elements[i].checked)
{
Yen += eval(document.calcFORM.elements[i].value);
}
}
document.calcFORM.合計.value = (Yen + 60000) + "円";
}
//-->
</SCRIPT>

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 61% (1594/2576)

elements.lengthを調べてみれば、原因がわかると想像されます。

あるいは、
var e = document.forms["calcFORM"].elements;
for (i=0; i<e.length; i++) alert(i + " / " + e[i].nodeName);
で添字と要素の関係を確認してみるとか?
お礼コメント
terafield

お礼率 83% (5/6)

ありがとうございました。
elements[i]でのカウントはradioボタンなどの要素だけかと思っておりましたが、
表示される nodeName をみて間違いがはっきりわかりました。
投稿日時:2010/09/09 20:03

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 68% (258/374)

chromeのみdocument.calcFORM.elements にfieldset要素が含まれていないようですね。
ブラウザとしてどちらの動きが正しいのか自分には不明ですが、それが原因で動作に違いが出てきてますね。
chrome以外ではfiledset要素も含まれているため、i<8としないと最後のラジオボタンまで判定処理が動きません。

修正としてはgetElementsByTagName('input')などを使用して、
input要素を全て取得→ラジオボタンかを判定→選択されていたら合算する、
という風にするのが簡単でしょうか。
お礼コメント
terafield

お礼率 83% (5/6)

カウント要素にfiledsetが含まれるとは勉強不足でした。
ありがとうございました。
投稿日時:2010/09/09 20:08
  • 回答No.2

ベストアンサー率 65% (870/1330)

抜本的にかえたいところだけど、
質問者さんのやり方を尊重して、
for (i=0; i<6; i++)

for(i=0;i<document.calcFORM.elements.length;i++)

変えてはいかが
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ