Javascript 对window.onload进行两次调用是否有效?
我有两块JavaScript,它们都通过Javascript 对window.onload进行两次调用是否有效?,javascript,Javascript,我有两块JavaScript,它们都通过winodow.onload调用函数。其中一个函数在每个页面上调用,但另一个函数仅在一个特定页面上调用。在那个页面上,一个函数工作,但另一个不工作,我没有看到任何错误 在不同的脚本块中通过window.onload调用这两个函数是否重要(参见示例)?这不管用吗 <!--some html--> <script language="JavaScript" type="text/javascript"> function fi
winodow.onload
调用函数。其中一个函数在每个页面上调用,但另一个函数仅在一个特定页面上调用。在那个页面上,一个函数工作,但另一个不工作,我没有看到任何错误
在不同的脚本块中通过window.onload
调用这两个函数是否重要(参见示例)?这不管用吗
<!--some html-->
<script language="JavaScript" type="text/javascript">
function firstFunction(){
//do stuff
}
window.onload = firstFunction;
</script>
<!--some html-->
<script language="JavaScript" type="text/javascript">
function secondFunction(){
//do stuff
}
window.onload = secondFunction;
</script>
<!--some html-->
函数firstFunction(){
//做事
}
window.onload=firstFunction;
函数secondFunction(){
//做事
}
window.onload=secondFunction;
更新:
我最终接受了ZZBOV的建议,使用jQuery的
$(document).ready(doAction)代码>函数。现在,我在一个页面上包含了多个.js
,所有这些都使用此调用,并且没有冲突。第二个onload
分配正在擦除第一个。因此,如果在同一页上有两个window.onload
作业指向两个不同的处理程序,则第二个将获胜。您需要将它们合并为一个:
<script type="text/javascript">
function firstFunction(){
//do stuff
}
</script>
<!--some html-->
<script type="text/javascript">
function secondFunction(){
//do stuff
}
</script>
<script type="text/javascript">
window.onload = function() {
firstFunction();
secondFunction();
};
</script>
函数firstFunction(){
//做事
}
函数secondFunction(){
//做事
}
window.onload=函数(){
firstFunction();
第二个函数();
};
正如@Darin所说,第二个赋值覆盖了分配给onload
的第一个值。查看创建多个onload
事件的方法:
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
这样使用:
addLoadEvent(nameOfSomeFunctionToRunOnPageLoad);
addLoadEvent(function() {
/* more code to run on page load */
});
我让他解释一下:
这种工作方式相对来说比较简单
简单:如果window.onload没有
已经分配了一个函数,则
传递给addLoadEvent的函数为
仅分配给window.onload。如果
已设置window.onload,a
创建了一个全新的功能
首先调用原始的onload
处理程序,然后调用新的处理程序
后来
闭包非常酷。注册事件处理程序的推荐最佳实践是使用“addEventListener”(请参阅)。使用此方法可确保处理程序是可添加的,并且不会替换现有的处理程序
function something() {alert("1");}
function somethingElse() {alert("2");}
window.addEventListener("load", something, false);
window.addEventListener("load", somethingElse, false);
我最终接受了ZZBOV的建议,使用jQuery的$(document).ready(doAction);功能。现在,我在一个页面上包含了多个.js,所有这些都使用此调用,并且没有冲突。简单。试试这个
window.addEventListener(“加载”,函数(evt){
警报(“你好1”);
});
window.addEventListener(“加载”,函数(evt){
警报(“你好2”);
});
window.addEventListener(“加载”,函数(evt){
警报(“你好3”);
});代码>为什么javascript必须分为两个块?一旦你开始深入了解模块化javascript,你会很快意识到以更简单的方式重用代码块是件好事。虽然我不想提倡总是使用一个库来做任何事情,即使不必要,但我强烈推荐jQuery来做这类事情。如果你想添加多个事件侦听器,请看一下:@errorhandler网站的设置方式每个页面都分为几个.cfm
文件,每一个都代表页面的某一部分。如果我想在component1.cfm
所在的部分显示一些内容,我必须将代码放在那里。最初我将脚本划分到它们相关的.cfm
文件中,但现在我有了足够的脚本,可以更容易地将它们合并到一个.js
文件中并进行排序。@typoknig另外,onload事件的jQuery解决方案是jQuery(函数($){…这里的代码…})
,您可以根据需要多次调用它,所有操作都会正常进行。您应该提到IE使用了不同的方法来实现这一点。@Felix,谢谢您指出这一点。IE使用“attachEvent”也解决了我的问题。我试图使用window.onload,这与Primefaces/JSF有冲突。@Iwburk这听起来不错,我明天会研究它。唉,这就是我想的,我只是希望我错了:(