0

動的に生成されているページ(およびdiv)があり、このページで行う必要があるのは、ページが読み込まれた直後に特定のdivにスクロールすることです。このコードで厄介なのはこれです...

以下の「ボタン」コードは、マウスをその上(またはonclick)に置くと完全に機能します。rolldownTo機能を完全に実行します。ただし、何も使用せずに同じアクションを指定しようとすると、window.onload,何も起こりません。「ボタン」コードとwindow.onload以下の両方を含めました。

<html>
<head>
<title>Help</title>

<script LANGUAGE="JavaScript1.2" type="text/javascript" 
    src="http://ajax.googleapis.com/ajax/libs/dojo/1.5/dojo/dojo.xd.js"
    djConfig="usePlainJson : true, parseOnLoad: true">
</script>

<script type="text/javascript">
    dojo.require("dojo.parser");
    dojo.require("dijit.form.FilteringSelect");
    dojo.require("dijit.form.TextBox");
    dojo.require("dijit.layout.ContentPane");
    dojo.require("dijit.layout.BorderContainer");
    dojo.require("dijit.layout.TabContainer");
    dojo.require("dojo.data.ItemFileReadStore");
    dojo.require("dojo.window");


function rolldownTo(my_anchor){
    dojo.window.scrollIntoView(my_anchor);
}

window.onload=rolldownTo('car_help');
</script>

<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs    /dojo/1.5/dijit/themes/claro/claro.css"/>
</head>

<body class="claro">

<div dojoType="dijit.layout.BorderContainer" style="width: 100%; height: 100%;">
    <div dojoType="dijit.layout.TabContainer" region="center">
        <div dojoType="dijit.layout.ContentPane" title="CAR HELP" selected=true>
           <button type=button id=button1 onmouseover="rolldownTo('car_help');">
             scroll to car_help
            </button>
            ........
            LOTS OF DIVS LIVE IN THIS DIV, INCLUDING MY TARGET "car_help"
            ........  
 </div>
        <div dojoType="dijit.layout.ContentPane" title="BIKE HELP" selected=false>
     ........
            ........
        </div>
    </div>
</div>
<script language="JavaScript1.2" type="text/javascript">
.... LOTS OF CODE THAT GENERATES CONTENT FOR THE DIVS ABOVE
</script>

</body>

</html>

Javascriptイベントがなぜ完全に機能するのか、onmouseoverまたはonclick完全に機能するのか、誰かが知ってwindow.onloadいますか?

4

2 に答える 2

3

あなたの問題はこの行です:

window.onload=rolldownTo('car_help');

イベントrolldownToのコールバックとして関数を割り当てるのではなく、関数を実行して戻り値を割り当てています。この場合は.onloadundefined

機能させるには、匿名関数で呼び出しをラップする必要があります。

window.onload = function(){ rolldownTo('car_help'); };

これで、無名関数がonloadイベントによって呼び出され、次に が呼び出されますrolldownTo

NiLが途中で指摘したように(onloadDOMLoaded後に発火する) 、ここdojo.addOnLoadの代わりに使用できwindow.onloadますが、上記の理由により匿名関数を使用する必要があります。

于 2011-01-06T22:16:30.510 に答える
2

ページの読み込みは、DOMツリーが完全に初期化されたことを意味するわけではありません。つまり、ツリーが機能しなくなるまでスクリプトはdivを移動できません。終了するまで、javascriptイベントDOMContentLoadedを使用して待機する必要があります。

dojoには、呼び出すことができる関数があり、ブラウザがDOMツリーを終了するまで待機します。次のように使用できます。

dojo.addOnLoad(function(){rolldownTo('car_help');});

これがあなたのために働くことを願っています

よろしくNiL

于 2011-01-06T21:45:53.963 に答える