Javascript 页面加载后移到div&引用;onmouseover“;工作,但;窗口。仅加载“;不

Javascript 页面加载后移到div&引用;onmouseover“;工作,但;窗口。仅加载“;不,javascript,onclick,dojo,dom-events,onmouseover,Javascript,Onclick,Dojo,Dom Events,Onmouseover,我有一个动态生成的页面(和div),我需要在页面加载后立即滚动到特定的div。这个代码有什么不对劲的地方是 当您在下面的“按钮”代码上运行鼠标时(或onclick),它可以完美地工作。它完美地执行了rolldownTo功能。但是,当我尝试使用window.onload指定相同的操作时,什么也没有发生。我已经包括了“按钮”代码和下面的窗口。onload <html> <head> <title>Help</title> <script LAN

我有一个动态生成的页面(和div),我需要在页面加载后立即滚动到特定的div。这个代码有什么不对劲的地方是

当您在下面的“按钮”代码上运行鼠标时(或
onclick
),它可以完美地工作。它完美地执行了
rolldownTo
功能。但是,当我尝试使用
window.onload指定相同的操作时,
什么也没有发生。我已经包括了“按钮”代码和下面的
窗口。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>

帮助
require(“dojo.parser”);
require(“dijit.form.FilteringSelect”);
require(“dijit.form.TextBox”);
require(“dijit.layout.ContentPane”);
require(“dijit.layout.BorderContainer”);
require(“dijit.layout.TabContainer”);
require(“dojo.data.ItemFileReadStore”);
dojo.require(“dojo.window”);
函数rolldownTo(我的锚){
dojo.window.scrollIntoView(我的锚);
}
window.onload=rolldownTo('car_help');
滚动至汽车帮助
........
很多剧组都住在这个剧组,包括我的目标“car\u help”
........  
........
........
.... 为上面的div生成内容的大量代码

有人知道为什么像
onmouseover
onclick
这样的Javascript事件可以很好地工作,但是
window.onload
不能工作吗?

页面加载并不意味着DOM树已经完全初始化,这意味着除非树完成工作,否则脚本无法移动div,您必须使用javascript事件DOMContentLoaded等待它完成

在dojo中,有一个可以调用的函数,它等待浏览器完成DOM树,您可以将其用作:

dojo.addOnLoad(function(){rolldownTo('car_help');});
我希望这对你有用

致意
NiL

页面加载并不意味着DOM树已完全初始化,这意味着您的脚本无法移动div,除非树完成工作,您必须使用javascript事件DOMContentLoaded等待它完成

在dojo中,有一个可以调用的函数,它等待浏览器完成DOM树,您可以将其用作:

dojo.addOnLoad(function(){rolldownTo('car_help');});
我希望这对你有用

致意

您的问题是这一行:

window.onload=rolldownTo('car_help');
您没有将函数
rolldownTo
指定为
onload
事件的回调,而是执行该函数并指定返回值,在本例中是
未定义的

您需要使用匿名函数包装调用以使其正常工作:

window.onload = function(){ rolldownTo('car_help'); };
现在,匿名函数将被
onload
事件调用,然后调用
rolldownTo


问题到此为止,正如NiL已经指出的一半(
onload
在domload之后激发),您可以使用
dojo.addOnLoad
而不是这里的
window.onload
,但是出于上述原因,您仍然必须使用匿名函数。

您的问题是这一行:

window.onload=rolldownTo('car_help');
您没有将函数
rolldownTo
指定为
onload
事件的回调,而是执行该函数并指定返回值,在本例中是
未定义的

您需要使用匿名函数包装调用以使其正常工作:

window.onload = function(){ rolldownTo('car_help'); };
现在,匿名函数将被
onload
事件调用,然后调用
rolldownTo


问题到此为止,正如NiL已经指出的一半(
onload
在domload之后激发),您可以在这里使用
dojo.addOnLoad
而不是
window.onload
,但是,出于上述原因,您仍然必须使用匿名函数。

您可能已经尝试过,但是您尝试过在页面加载后将onload分配移动到页面底部。这样您就知道内容已加载。只是一个想法。您可能已经尝试过了,但您是否尝试过在页面加载后将onload分配移动到页面底部。这样您就知道内容已加载。只是一个想法。这个评论提供了一个很好的解决方案,但解释错误。DOMContentLoaded实际上在window.onload之前触发-后者等待图像等完成,而DOMContentLoaded只等待DOM树准备就绪
dojo.addOnLoad
(在1.4+中也是
dojo.ready
)等待在支持它的浏览器中加载domcontentload(不是IE),否则等待window.onload。Ivo实际上正确地识别了这个问题,但无论如何,最好是完全避免window.onload而支持
dojo.addOnLoad
,因为我不确定它是否会干扰dojo自己的加载逻辑。这个注释提供了一个很好的解决方案,但解释错误。DOMContentLoaded实际上在window.onload之前触发-后者等待图像等完成,而DOMContentLoaded只等待DOM树准备就绪
dojo.addOnLoad
(在1.4+中也是
dojo.ready
)等待在支持它的浏览器中加载domcontentload(不是IE),否则等待window.onload。Ivo实际上正确地识别了这个问题,但无论如何,最好是完全避免window.onload而支持
dojo.addOnLoad
,因为我不确定它是否会干扰dojo自己的加载程序逻辑。