こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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>

投稿日時 - 2010-09-09 17:09:42

QNo.6170220

困ってます

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

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

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

投稿日時 - 2010-09-09 17:40:27

お礼

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

投稿日時 - 2010-09-09 20:03:51

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

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

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

投稿日時 - 2010-09-09 17:44:06

お礼

カウント要素にfiledsetが含まれるとは勉強不足でした。
ありがとうございました。

投稿日時 - 2010-09-09 20:08:22

ANo.2

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

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

変えてはいかが

投稿日時 - 2010-09-09 17:41:03

あなたにオススメの質問