Firefoxでのwindow.onload時における非表示処理に関する質問です。


以下のような形でフォームを作成し、window.onload において、一部フォームの非表示処理を実施したところ、非表示処理前のフォームのheightに依存して、windowの長さが長いままになってしまいました。
IEでは、どうやらレンダリング時にwindowの長さが調整されている模様です。

ご回答宜しくお願いいたします。


<script type="text/javascript" src="http://www.prototypejs.org/assets/2007/6/20/prototype.js"></script>

<form>
<fieldset id="aaa">
<input type="checkbox" value="aaa">aaa
<input type="checkbox" value="aaa">aaa
<input type="checkbox" value="aaa">aaa
</fieldset>
<fieldset id="bbb">
<input type="checkbox" value="bbb">bbb
<input type="checkbox" value="bbb">bbb
<input type="checkbox" value="bbb">bbb
</fieldset>
<fieldset id="ccc">
<input type="checkbox" value="ccc">ccc
<input type="checkbox" value="ccc">ccc
<input type="checkbox" value="ccc">ccc
</fieldset>
<input type="submit">
</form>


<script type="text/javascript">

disableOne = function(target) {
target = $(target);
Element.getElementsBySelector(target, 'input, select, textarea').each(function(obj) {
obj.disabled = true;
});
target.style.display = 'none';
}

window.onload = function() {
disableOne("bbb");
disableOne("ccc");
}

</script>

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/11/12 16:11:09
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:minkpa No.1

回答回数4178ベストアンサー獲得回数55

id:lg-tsp

ばっちり解決しました。

他のエントリーでも見たのですが、Window.onload()時のJavascript発火タイミングに問題があるということなのですね。

どうもありがとうございました。

2007/11/12 16:04:11
  • id:Mars
    Firefox2(2.0.0.9)で試してみましたが、事象を確認できませんでした。
    「windowの長さ」という表現がひっかかるのですが、どのように事象を確認したのでしょうか?
  • id:lg-tsp
    コメントありがとうございます。

    「windowの長さ」=height です。
    そして、私のブラウザも同様にFirefox2(2.0.0.9)でした。

    確認した方法としては、Windowの高さを
    <fieldset id="aaa">
    のみが表示されるぐらい短くしてリロードした場合、bbb、cccを含めた長さで Window.height が認識されておりました。
  • id:lg-tsp
    自己レスです。
    window.onload = function() {}
    を以下の様に書き換えることで、問題が解決いたしました。

    function init() {
    // quit if this function has already been called
    if (arguments.callee.done) return;

    // flag this function so we don't do the same thing twice
    arguments.callee.done = true;

    // do stuff
    disableOne("bbb");
    disableOne("ccc");
    };


    //The window.onload Problem
    /* for Mozilla */
    if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", init, false);
    }

    /* for Internet Explorer */
    /*@cc_on @*/
    /*@if (@_win32)
    document.write("<script defer src=ie_onload.js><"+"/script>");
    /*@end @*/

    /* for other browsers */
    window.onload = init;

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません