웹 페이지의 자바스크립트 코드는 문서가 로드된 후 실행되어야 하는 경우가 많습니다. 그렇지 않으면 객체를 가져오지 못할 수 있으므로 다음 두 가지 방법을 사용하세요.
1. 스크립트 코드를 웹페이지 하단에 배치하여 스크립트 코드 실행 시 동작할 객체가 로딩되었는지 확인할 수 있도록 합니다.
2. window.onload를 통해 스크립트 코드를 실행합니다.
첫 번째 방법은 지저분하다고 느껴집니다(사실 권장됩니다). 스크립트 코드를 더 적절한 위치에 배치해야 하는 경우가 많으므로 window.onload 방법이 더 나은 선택입니다. window.onload는 이벤트입니다. 이 이벤트는 문서가 로드될 때 트리거됩니다. 이 이벤트에 대한 이벤트 핸들러를 등록하고 이벤트 핸들러에 실행할 스크립트 코드를 넣을 수 있습니다. . 먼저 코드 예제를 살펴보겠습니다.
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>window.onload用法</title> <style type="text/css"> #bg{ width:100px; height:100px; border:2px solid red; } </style> <script type="text/javascript"> document.getElementById("bg").style.backgroundColor="#F90"; </script> </head> <body> <div id="bg"></div> </body> </html>
위 코드의 원래 의도는 div의 배경색을 #F90으로 설정하는 것이었지만, document.getElementById("로 코드가 실행될 때 순차적으로 실행되기 때문입니다. #bg").style. backgroundColor="#F90"이라고 적힌 시점에는 이 div 객체가 아직 로드되지 않았으므로 설정이 성공할 수 없습니다. 코드는 다음과 같이 수정됩니다.
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>位置高度div垂直居中</title> <style type="text/css"> #bg{ width:100px; height:100px; border:2px solid red; } </style> <script type="text/javascript"> window.onload=function(){ document.getElementById("bg").style.backgroundColor="#F90"; } </script> </head> <body> <div id="bg"></div> </body> </html>
그 이유는 window.onload의 이벤트 처리 함수에 배경색을 설정하는 코드가 들어 있기 때문입니다. 문서가 로드될 때만 이벤트 처리 함수와 배경색을 설정하는 스크립트 코드가 실행됩니다.
이벤트 핸들러 함수 바인딩:
방법 1:
window.onload=function(){}, 위 코드에서 이 메서드는 이벤트 처리 함수를 window.onload 이벤트에 바인딩하는 데 사용됩니다. 물론 여기에 바인딩되는 것은 익명 함수입니다. 함수를 바인딩할 수도 있습니다. 코드 예는 다음과 같습니다.
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>window.onload用法详解</title> <script type="text/javascript"> window.onload=function myalert() { "); } </script> </head> <body> </body> </html>
위 코드는 myalert 메서드를 window.onload 이벤트에 바인딩할 수 있지만 다음과 같은 방식으로 여러 이벤트 핸들러를 이 이벤트에 바인딩할 수는 없습니다.
window.onload=function a(){}
window.onload=function b(){}
위 코드는 여러 이벤트 처리 함수를 window.onload 이벤트에 바인딩할 수 없지만 마지막 코드는 이전 함수를 모두 덮어씁니다. 하지만 코드는 수정할 수 있습니다.
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>window.onload用法</title> <style type="text/css"> #bg{ width:100px; height:100px; border:2px solid red; } </style> <script type="text/javascript"> window.onload=function(){ function a(){ document.getElementById("bg").style.backgroundColor="#F90"; } function b(){ document.getElementById("bg").style.width="200px"; } a(); b(); } </script> </head> <body> <div id="bg"></div> </body> </html>
위 코드는 여러 이벤트 처리 함수를 바인딩하는 것과 동일한 효과를 얻습니다.
방법 2:
addEventListener() 및 attachmentEvent()를 사용하여 이벤트 처리 기능을 onload 이벤트에 바인딩할 수 있습니다.
addEventListener()는 이벤트 처리 함수를 바인딩하는 현재 표준 방법이지만 IE8 이하 브라우저에서는 이 방법을 지원하지 않습니다.
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>window.onload用法</title> <style type="text/css"> #bg{ width:100px; height:100px; border:2px solid red; } </style> <script type="text/javascript"> window.addEventListener("load",bg,false); window.addEventListener("load",changeW,false); function bg(){ document.getElementById("bg").style.backgroundColor="#F90"; } function changeW(){ document.getElementById("bg").style.width="200px"; } </script> </head> <body> <div id="bg"></div> </body> </html>
위 코드는 여러 이벤트 핸들러를 window.onload 이벤트에 바인딩할 수 있습니다. 구문 형식에 대한 간략한 소개:
addEventListener("type", 함수 이름, false)
addEventListener() 함수에는 세 개의 매개변수가 있습니다. 첫 번째 매개변수는 이벤트 유형입니다. 이벤트 유형 이름 앞에는 on이 있을 수 없습니다. 예를 들어 window.onload 이벤트는 다음과 같이만 작성할 수 있습니다. 두 번째 매개변수는 바인딩할 함수의 이름이고, 세 번째 매개변수는 일반적으로 false입니다.
AttachEvent() 함수를 사용하여 이벤트 처리 함수를 바인딩합니다.
IE9 이전의 IE 브라우저는 addEventListener() 함수를 지원하지 않으므로, attachmentEvent() 함수가 작동하게 됩니다.
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>window.onload用法</title> <style type="text/css"> #bg{ width:100px; height:100px; border:2px solid red; } </style> <script type="text/javascript"> window.attachEvent("onload",bg); window.attachEvent("onload",changeW); function bg(){ document.getElementById("bg").style.backgroundColor="#F90"; } function changeW(){ document.getElementById("bg").style.width="200px"; } </script> </head> <body> <div id="bg"></div> </body> </html>
위 코드의 효과는 addEventListener() 함수를 사용한 것과 동일합니다. 구문 형식을 간단히 소개하겠습니다.
addEventListener("type", 함수 이름)
이 함수는 매개변수가 2개뿐입니다. 첫 번째 매개변수는 이벤트 유형이지만 addEventListener()의 첫 번째 매개변수와 기능은 동일하지만 이름 앞에 "on"이 있습니다. 첫 번째 매개변수는 바인딩할 이벤트 핸들러 함수의 이름입니다. 다양한 브라우저와 호환되기 위해서는 위의 코드를 수정해야 합니다.
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>window.onload用法</title> <style type="text/css"> #bg{ width:100px; height:100px; border:2px solid red; } </style> <script type="text/javascript"> if(window.addEventListener){ window.addEventListener("load",bg,false); window.addEventListener("load",changeW,false); } else{ window.attachEvent("onload",bg); window.attachEvent("onload",changeW); } function bg(){ document.getElementById("bg").style.backgroundColor="#F90"; } function changeW(){ document.getElementById("bg").style.width="200px"; } </script> </head> <body> <div id="bg"></div> </body> </html>
위 코드는 주요 브라우저의 호환성 문제를 해결합니다. 위 코드에서 판단하려면 다음 코드를 사용하세요.
if(object.addEventListener){ object.addEventListener(); } else{ object.attachEvent(); }
if 문을 사용하여 객체에 addEventListener 속성이 있는지 확인하세요. 그렇다면 addEventListener() 함수를 사용하고, 그렇지 않으면 attachmentEvent() 함수를 사용하세요.