- 締切済み
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 で試したところ、「その他」にチェックを入れた状態で「確認」ボタンを押し、その後にフォームに戻ると、テキストエリアが無効化されたままになってしまいます。 解決方法をご教授いただければ幸いです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- think49
- ベストアンサー率59% (285/482)
何度か試したら一回だけですが、再現できました。 その後、再現方法が掴めないでいるのですが、[その他] にチェックは入っていなかったように思います。 hmai2さんの環境ではどうだったでしょうか? もし、[その他] にチェックが入っていなかったとすると、onload からは対応しようがありません。 (チェックが入っていない = textareaをdisabledにする条件が満たされない) その場合は、おそらく、Operaのキャッシュが効いていない影響なので、キャッシュ関連の設定を確認してみてください。
- think49
- ベストアンサー率59% (285/482)
Opera10.53で検証したところ、再現できませんでした。 とりあえず、Operaのエラーコンソールや開発者ツールでエラーメッセージが確認できないでしょうか? あと、document.myform.kikkake[3], document.myform.sonota のようなレガシーな書き方は避けた方が無難だと思います。 例えば、getElementById(), elementsプロパティ等を利用したらどうなるでしょうか?
補足
早速回答いただき、ありがとうございます。 ご指摘のとおり、Opera のエラーコンソール等にひととおり目を通しましたが、それらしいエラーは表示されていませんでした。 また、テキストエリアに id="other" を振って、スクリプトを以下のように修正してみましたが、改善しませんでした。 function testFunc(){ if(document.getElementById('r4').checked == true){ document.getElementById('other').disabled = false; }else{ document.getElementById('other').disabled = true; } } 何か環境依存の問題なのでしょうか?