window.onload in external script gets ignored in Javascript

那年仲夏 提交于 2019-12-01 17:41:56

1)The way you're binding, you can have just one method attached to an event. You need to add an event listener for what you want.

window.addEventListener("load", function() { alert("hello!");});

Setting directly a method to the onload event will replace any previously attached method. But if you use listeners instead, you can have many of them bound to an event.

2)If you comment out the onload in your external file, when the document.getElementsByClassName("bar") is called, your document isn't ready yet, then, it will return 0 items.

3)Use the addEventListener as I explained in the first point. If you apply this in both places, it will work like a charm.

onload is a property of window. It acts like any other variable property. When you try to use it twice you're overwriting the original value with your second write.

So your entire external script is ignored when you wrap it in window.onload, because window.onload is then overwritten to be

function() {
    console.log("hello from html");
};

If you want to do execute 2 functions, define 2 functions, a and b,

and set window.onload like this:

window.onload = function(){
  a();
  b();
}

Alternatively, you can bind 2 separate events in the way Alcides' answer suggests. My personal view is that its cleaner to do a single bind with multiple functions since its easier to know whats bound, know what order your functions will execute in, and see everything thats happening in one place, but its mostly a matter of style/preference if the order doesn't matter.

Thats Correct, you are overwriting your own onload, but you can always attach a new event listener to the window like this

function onLoadHandler(){
console.log("hello from external js");

var bar = document.getElementsByClassName("bar");

// page not loaded, so this returns 0 instead of 1
console.log(bar.length);
}
if (window.addEventListener) {
window.addEventListener('load', onLoadHandler); }
 else if (window.attachEvent) { window.attachEvent('onload', onLoadHandler ); }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!