Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对window.onload进行两次调用是否有效?_Javascript - Fatal编程技术网

Javascript 对window.onload进行两次调用是否有效?

Javascript 对window.onload进行两次调用是否有效?,javascript,Javascript,我有两块JavaScript,它们都通过winodow.onload调用函数。其中一个函数在每个页面上调用,但另一个函数仅在一个特定页面上调用。在那个页面上,一个函数工作,但另一个不工作,我没有看到任何错误 在不同的脚本块中通过window.onload调用这两个函数是否重要(参见示例)?这不管用吗 <!--some html--> <script language="JavaScript" type="text/javascript"> function fi

我有两块JavaScript,它们都通过
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这听起来不错,我明天会研究它。唉,这就是我想的,我只是希望我错了:(