Java Script 買い物フォームの要素の作動不具合

このQ&Aのポイント
  • Google(Chrome)では正常ですが、IE8 Firfox ブラウザでは2段目のメモリ覧でのラジオボタンが作動しません。
  • <FIELDSET><LEGEND>タグを外すと正常に作動します。または、6より大きな数字(8など)を入れると正常作動します。
  • 原因を教えてください。
回答を見る
  • ベストアンサー

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>

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

elements.lengthを調べてみれば、原因がわかると想像されます。 あるいは、 var e = document.forms["calcFORM"].elements; for (i=0; i<e.length; i++) alert(i + " / " + e[i].nodeName); で添字と要素の関係を確認してみるとか?

terafield
質問者

お礼

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

その他の回答 (2)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.3

chromeのみdocument.calcFORM.elements にfieldset要素が含まれていないようですね。 ブラウザとしてどちらの動きが正しいのか自分には不明ですが、それが原因で動作に違いが出てきてますね。 chrome以外ではfiledset要素も含まれているため、i<8としないと最後のラジオボタンまで判定処理が動きません。 修正としてはgetElementsByTagName('input')などを使用して、 input要素を全て取得→ラジオボタンかを判定→選択されていたら合算する、 という風にするのが簡単でしょうか。

terafield
質問者

お礼

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

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

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

関連するQ&A

  • Java Scriptで・・・

    <form name="f"> <table border> <tr><td>番号</td><td>問題</td><td>解答</td><td>正誤</td></tr> <script type="text/javascript"> <!-- // 変数・関数の定義 var i, n1, n2; var s = new Array(11); // 正解を保存する配列 s[0] ~ s[10] function myrandom(n) { return Math.floor(Math.random() * n); } function check() { var i, ok=0, ng=0; for (i=1; i<=10; i++) { if (document.f.elements["s" + i].value == s[i]) { document.f.elements["c" + i].value = "○"; ok++; } else { document.f.elements["c" + i].value = "×"; ng++; } } document.f.ok.value = ok; document.f.ng.value = ng; } for(i=1; i<=10; i++){ n1 = myrandom(10) + 1; n2 = myrandom(10) + 1; s[i] = n1 + n2; document.writeln('<tr>'); document.writeln('<td>' + i + '</td>'); document.writeln('<td>' + n1 + ' + ' + n2 + ' =</td>'); document.writeln('<td><input type="text" name="s' + i + '" size="3"></td>'); document.writeln('<td><input type="text" name="c' + i + '" size="3"></td>'); document.writeln('</tr>'); } // --> </script> </table> <input type="button" value="答え合わせ" onclick="check();"> 正答数:<input type="text" name="ok" size="3"> 誤答数:<input type="text" name="ng" size="3"> </form> このようなプログラムを作ったのですが、この表示される10問が全部異なる問題となるようにするにはどうすればいいでしょうか?

  • ジャバスクリプトを入れるとCGIエラーが出てします。

    下記のような感じでプログラムしてみたのですがどうしてもCGIエラーが出てしまいます。 何か打開策などございましたら教えて頂けないでしょうか?お願いします。 $Head=$Head.qq{ <script> function send(){ //どのラジオボタンがチェックされたか判定 var i; if (document.form_a.r_b.length) { for (i = 0; i < document.form_a.r_b.length; i++) { if (document.form_a.r_b[i].checked) { var ck_b = document.form_a.r_b[i].value; } } } else q{ if (document.form_a.r_b.checked) { var ck_b = document.form_a.r_b.value; } } //チェックされたボタンから遷移先を分ける if(ck_b=="A"){ document.form_a.action="http://www.***.co.jp/cgi-local/J_S001.cgi?ff_flg=2&free=" + document.form_a.KENSAKU.value; document.form_a.submit(); }else if(ck_b=="B"){ document.form_a.action="http://www.***.co.jp/cgi-local/H_S001.cgi?ff_flg=2&day_flg=1&free=" + document.form_a.KENSAKU.value; document.form_a.submit(); } else if(ck_b=="F"){ document.form_a.action="http://www.***.co.jp/cgi-local/SearchJobOffer1b.cgi?ff_flg=2&free=" + document.form_a.KENSAKU.value; document.form_a.submit(); } } </script> };

  • お問い合わせフォームを作成しているのですがジャバがうまく動いてくれません。

    お問い合わせフォームを作成しているのですが(phpとscriptです)、 script部分がうまく動いてくれません。 必須項目が名前、ふりがな、ラジオボタンで選択項目3つあります。 名前、ふりがな部分を入力せずに送信を押すとアラートがなりますが、 ラジオボタン部分がIEでは一つも選択しないとアラートが正常に機能しますが、ファイヤーフォックスでは送信されてしまいます。 下記にscript部分をコピペしておきますのでお気づきの点がありましたら教えて下さい。 <script LANGUAGE="javascript"> function CheckInput(){ /*チェック項目*/ var object = document.form_1.name.value; if(object == ""){ alert("お名前を入力してください"); return false; } /*チェック項目*/ var object = document.form_1.furigana.value; if(object == ""){ alert("ふりがなを入力してください"); return false; } /*チェック項目*/ var check_flag = 0; //チェックボックスの配列の数だけループ(1個目の配列チェック) for(var i = 1 ;i <= 3 ;i++){ //1個以上のチェックがあればフラグを変更 if(document.all("renraku["+i+"]").checked == true){ check_flag = 1;} } //フラグが0なので1個以上のチェックが無い if(check_flag == 0){ alert("ご連絡方法を選択して下さい") return false; } } </script> また、script部分ではなく、他の原因等が考えられましたら教えていただきたく思います。 宜しくお願い致します。

  • javaスクリプトによりフォーム入力

    javaスクリプトによりフォーム入力を製作中です。 ラジオボタン、チェックボックス、プルダウン選択を選択すると、同ページのテキストエリアにそれらを選択した時点で反映されるというものです。 html構造として table/ 項目1 項目2 項目3 項目4 ・ ・ ・ ------ テキストエリア ------ /trable となっていきます。 var copytoclip=1 function CopyAll(mytext) { var tempval=eval("document."+mytext) tempval.focus() tempval.select() if (document.all&&copytoclip==1){ therange=tempval.createTextRange() therange.execCommand("Copy") setTimeout("window.status=''",1800) } } function setChars(form) { if(form.n1[0].checked) { str1 = document.myform.n1[0].value } else if(form.n1[1].checked) { str1 = document.myform.n1[1].value } else if(form.n1[2].checked) { str1 = document.myform.n1[2].value } else { str1 = "テキストテキスト" } /*下がテキストエリアへ反映される*/ document.myform.mytext.value = "hogehoge" + str1 +・・・・ + "\n\n" } といったものです。 【苦戦しているところ】 選択項目がひとつしかない場合に、チェック項目を作成しても テキストエリアへ反映されません。 -・--・--・--・--・- また、これとは別によりいいサンプル等ありましたら、教えていただけるとありがたいです。

  • java script フォームのチェックボックス入力制限について

    java script フォームのチェックボックス入力制限について どなたかお教えください。 以下のコードを書き換えて、現状では1つのチェックボックスを複数にし(かつ、複数選択可にし)、チェックボックスをチェックした場合のみ「選択肢」ラジオボタンがアクティブになる仕様にしたいと考えております。 サイト上で見つけたサンプルコードをいじっているのですが、何分素人なのでうまく行きません。どなたか助けていただけると助かります。 よろしくお願いします。 <script type="text/javascript"> function fchk3(obj){ var frm=obj.form; var len=frm.elements.length; if(obj.checked==true){ for(var i=0; i<len; i++){ if(frm.elements[i].type=="radio"){ frm.elements[i].disabled=false; } } }else{ for(var i=0; i<len; i++){ if(frm.elements[i].type=="radio"){ frm.elements[i].checked=false; frm.elements[i].disabled=true; } } } } </script> <form name="form3" action="#"> <label for="chk3"><input type="checkbox" id="chk3" name="chk3" onclick="fchk3(this)" checked="checked" />このボタンのチェックを外すとラジオボタンが無効化</label><br /> <label for="chk3_r1"><input type="radio" id="chk3_r1" name="r1" />選択肢</label> </form>

  • ジャバスクリプトについての質問です。

    はじめまして。ホームページ内に音声を挿入するためにソフトウェアを使用し音声を挿入しましたが、IEではしっかりと起動し、FIREFOXで全く機能しません。 下記にあるジャバスクリプトのコードをHTML内に記述することで上手く動くと説明されたのですが… <script language='JavaScript' src='Project3/ImpactWebAudio.js' type='text/javascript'></script> ここからのコードはImpactWebAudio.jsに書かれているコードになります。 document.write('<object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#3,0,0,0" width="100" height="40">'); document.write('<param name="SRC" value="Project3/ImpactWebAudio.swf">'); document.write('<param name="BGCOLOR" value="#FFFFFF">'); document.write('<param name="wmode" value="transparent" />'); document.write('<embed src="Project3/ImpactWebAudio.swf" wmode="transparent"'); document.write('pluginspage="http://www.macromedia.com/shockwave/download/" type="application/x-shockwave-flash" width="100" height="40" bgcolor="#FFFFFF" >'); document.write('</embed>'); document.write('</object>'); フラッシュで作成されたボタンとすべてのファイルはProject3フォルダの中に入っております。 IEでは反映されましたので、階層などにも間違いはないと思いますが、FIREFOXで上手く機能しないことにはどのような理由があるのでしょうか? ご存知の方がおりましたら、ご指導のほどよろしくお願いします。 (FIREFOXの設定はジャバスクリプト有効になっております。)

  • クイズの正解(○×)をテキストボックスに出す方法は・・・

    ラジオボタンで2択のクイズを作成しています。最後に「計算」ボタンを押すと点数は出ます。あと!ラジオボタンの横にテキストボックスを設置して、正解なら「○」、不正解なら「×」と出るようにしたいのですが・・・ ぜひ教えてください。 よろしくお願いいたします。 <SCRIPT language="JavaScript"> <!-- function displayScore() { var score = 0; for(i=0;i<=20;i++){ if(document.form1.elements[i].checked){ score += parseInt(document.form1.elements[i].value); } } document.form2.SCORE.value=score window.alert(" あなたの点数は " + score + " 点です"); }

  • ボタンを押すまで次の処理へ行かないようにする方法

    問題を出題して、答えボタンを押すと、答えが表示され、nextボタンが押されると 次の問題を表示するというプログラムを考えているのですが <BODY> <FORM> <SCRIPT type="text/javascript"> <!-- mondai = new Array(); mondai[0] = "問題1"; mondai[1] = "問題2"; answer = new Array(); answer[0] = "答え1"; answer[1] = "答え2"; for(i = 0; i < 2; i++) { document.write(mondai[i] + "<P>"); document.write("<INPUT type=\"button\" value=\"答え\">"); while(true){ if(document.forms[0].elements[0].value == true){ break; } } document.write(kotae[i] + "<P>"); document.write("<INPUT type=\"button\" value=\"次へ\">"); } // --> </SCRIPT> </FORM> </BODY> onclickではなく、ボタンが押されたとわかるには、どのように記述すればいいのでしょうか。 ググッても、欲しい情報が出てこず、困っています。 while(true){ if(document.forms[0].elements[0].value == true){ break; } } このように書いて、valueがtrueなら、押されたってことかな。と自分の想像でコードを書いてみた のですが、うまくいきません。 whileでループさせて、ifボタンが押されたら、breakでwhileを抜け出すように書いたのですが ボタンが押されたを、検知するにはどのように書いたらいいでしょうか。 なお、なにぶん作成途中なので、コードは未完成です。ボタンが押されたというのを、どの ようにコード書いたらいいのかアドバイスいただけるとうれしいです。

  • Javaでフォームのオブジェクトをどのように記述するか

    こんにちは。いつもお世話になっています。 現在ポップアップウィンドウを用いたWEBページを作成し、その機能をカスタムタグによって再現するという作業をしています。 mainWinからsubWinを開き、sabWinからmainWinに表示された画像をjavascriptで変化させるというものです。 まず ラジオボックスがチェックされているかなどを調べる for(i=0; i<document.forms[name].elements[form_ele].length; i++) { if(document.forms[form_name].elements[form_ele][i].checked) break; } (form_nameはフォーム名form_eleは要素名でこの関数呼び出し時に引数で渡しています) などの処理があり、その後画像変更を行います。 基本はimageに image = document.forms[form_name].elements[form_ele][i].value; でフォームで選択した画像名を渡し window.opener.document.getElementById('ID').src=image; (IdのIDは変更場所を示しています) によって画像を変更しています。 現在window.opener~のところを <castom tag:カスタムタグ名 mode="getElementById('ID').src" value="image"/> といったように書き換えるタグは単純ですので可能でしたが form_nameやform_eleもカスタムタグのところで要素として(?)渡し、 (<casom tag:カスタムタグ名 mode="getElementById('ID').src" value="image" name="form_name" elements="form_ele"/>といったふうに) チェック済み判定部分などすべてカスタムタグで表記できないかと考えています。 しかしforms[form_name]やwindow.opener等のオブジェクト名(?)はどのようにすればjavaが理解し、処理してくれるのでしょうか? (getParameterなどでキャッチすればいいのでしょうか?ただ名前だけキャッチしても処理させるにはどうするのかわかりません・・・) またこのようなことは不可能でしょうか? よろしくお願いします。

  • クリックでボタンの画像を変更するjavascriptsで

    通常A画像のボタンが押された場合、B画像に変更すると言う動作を行いたいのですが、 document.f1.elements['b1'].src = "A.jpg"; この部分でエラーがでます。 input type="image"のsrcを指定するにはどうしたら良いでしょうか。 --------------------- <html> <script language="javascript"> <!-- function ImageChange(){ if(document.f1.elements['b1value'].value == 0){ document.f1.elements['b1'].src = "A.jpg"; document.f1.elements['b1value'].value = 1; }else{ document.f1.elements['b1'].src = "B.gif"; document.f1.elements['b1value'].value = 0; } } //--> </script> <body> <form name="f1"> <input type="image" name="b1" src="A.gif" onclick="ImageChange()" > <input type="hidden" name="b1value" value="0"> </form> </body> </html>