• 締切済み

Opera における onload イベントの動作について

Opera における onload イベントの動作について 「その他」が選択されたときのみ、テキストエリアの無効化が解除されるような仕組みを JavaScript で実現したいのですが、Opera 10.53 で期待通りに動作せず、困っています。 内容は、以下の通りです。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <title>入力画面</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript" src="common.js"></script> </head> <body onLoad="testFunc()"> <form action="dummy.html" method="POST" name="myform"> このサイトを知ったきっかけは何ですか?<br> <input type="radio" name="kikkake" value="検索エンジン" id="r1" onClick="testFunc()"> <label for="r1">検索エンジン</label><br> <input type="radio" name="kikkake" value="広告" id="r2" onClick="testFunc()"> <label for="r2">広告</label><br> <input type="radio" name="kikkake" value="口コミ" id="r3" onClick="testFunc()"> <label for="r3">口コミ</label><br> <input type="radio" name="kikkake" value="その他" id="r4" onClick="testFunc()"> <label for="r4">その他</label>   <textarea cols="40" rows="5" name="sonota" style="vertical-align: top;"></textarea><br> <input type="submit" value="確認"> </form> </body> </html> ------------------------- common.js の中身は以下の通りです。 function testFunc(){ if(document.myform.kikkake[3].checked == true){ document.myform.sonota.disabled = false; }else{ document.myform.sonota.disabled = true; } } 閲覧者が「確認」ボタンを押した後、入力内容を修正するためにブラウザの「戻る」ボタンでフォームに戻ってくる場合を想定して、onload イベントを設定しています。 しかし、Opera で試したところ、「その他」にチェックを入れた状態で「確認」ボタンを押し、その後にフォームに戻ると、テキストエリアが無効化されたままになってしまいます。 解決方法をご教授いただければ幸いです。

みんなの回答

  • think49
  • ベストアンサー率59% (285/482)
回答No.2

何度か試したら一回だけですが、再現できました。 その後、再現方法が掴めないでいるのですが、[その他] にチェックは入っていなかったように思います。 hmai2さんの環境ではどうだったでしょうか? もし、[その他] にチェックが入っていなかったとすると、onload からは対応しようがありません。 (チェックが入っていない = textareaをdisabledにする条件が満たされない) その場合は、おそらく、Operaのキャッシュが効いていない影響なので、キャッシュ関連の設定を確認してみてください。

  • think49
  • ベストアンサー率59% (285/482)
回答No.1

Opera10.53で検証したところ、再現できませんでした。 とりあえず、Operaのエラーコンソールや開発者ツールでエラーメッセージが確認できないでしょうか? あと、document.myform.kikkake[3], document.myform.sonota のようなレガシーな書き方は避けた方が無難だと思います。 例えば、getElementById(), elementsプロパティ等を利用したらどうなるでしょうか?

hmai2
質問者

補足

早速回答いただき、ありがとうございます。 ご指摘のとおり、Opera のエラーコンソール等にひととおり目を通しましたが、それらしいエラーは表示されていませんでした。 また、テキストエリアに id="other" を振って、スクリプトを以下のように修正してみましたが、改善しませんでした。 function testFunc(){ if(document.getElementById('r4').checked == true){ document.getElementById('other').disabled = false; }else{ document.getElementById('other').disabled = true; } } 何か環境依存の問題なのでしょうか?

関連するQ&A

専門家に質問してみよう