当前位置:学会吧培训频道电脑知识学习网页制作Javascript教程javascript的事件加载» 正文

javascript的事件加载

[08-08 00:41:47]   来源:http://www.xuehuiba.com  Javascript教程   阅读:8342
概要: if (typeof window.onload != 'function') { window.onload = fn(); }else { window.onload = function() { oldonload(); fn(); } } } JS.onReady = onReady; var $ = function(id){ return document.getElementById(id); } JS.$ = $; })() JS.onReady(function(){ var $ = JS.$; try{ alert($("test")
javascript的事件加载,标签:javascript视频教程,javascript教程下载,http://www.xuehuiba.com
          if (typeof window.onload != 'function') {
            window.onload = fn();
          }else {
            window.onload = function() {
              oldonload();
              fn();
            }
          }
        }
        JS.onReady = onReady;
        var $ = function(id){
          return document.getElementById(id);
        }
        JS.$ = $;
      })()
      JS.onReady(function(){
        var $ = JS.$;
        try{
        alert($("test").innerHTML);
        }catch(e){
           alert(e);
        }
      })
    </script>
  </head>
  <body>
    <p id="test">Test</p>
  </body>
</html>
 
运行代码

报错,说找不到节点。为什么找不到呢?因为我们在调用它的时候,DOM树还没有建立起来!不会吧,网页是如此完整地显示我们眼前了。这与闭包的运作有关,当JS引擎解析到闭包的最后一个“}”,就把里面的东西锁到一个密封的环境中,JS继续向下执行,就修正不了闭包中的window的属性了。window有一个出名的属性,叫做document,它引用着整个DOM树(当然还有其他操作)。DOM树是一个复杂的键值对,当JS不断向下解析时,就不断往document添加相应的节点。但当它塞进闭包后,里面的时间就静止了,因此它还停留在解析head的阶段,document是残缺的,想获取body中的节点,当然是返回null了。于是问题的关键是如何让闭包内的document重新继续向下解析。 方法有两个,一个是利用侦听器(addEventListener与attachEvent),一个是利用基于时间轴的setTimeout与setInterval。

01.(function(){
02.   
if(!window.JS){
03.       
window['JS'] = {}
04.   
}
05.   
var addEvent = function( obj, type, fn ) {
06.       
if (obj.addEventListener)
07.           
obj.addEventListener( type, fn, false );
08.       
else if (obj.attachEvent) {
09.           
obj["e"+type+fn] = fn;
10.           
obj.attachEvent( "on"+type, function() {
11.               
obj["e"+type+fn]();
12.           
} );
13.       
}
14.   
};
15.   
var onReady = function(loadEvent,waitForImages) {
16.       
if(waitForImages) {
17.           
return addEvent(window, 'load', loadEvent);
18.       
}
19.   
}
20.   
JS.onReady = onReady;
21.   
var $ = function(id){
22.       
return document.getElementById(id);
23.   
}
24.   
JS.$ = $;
25.})()<!doctype html>
<html dir="ltr" lang="zh-CN">
  <head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <title>闭包环境中的事件加载</title>
    <script type="text/javascript">
   (function(){
    if(!window.JS){
        window['JS'] = {}

上一页  [1] [2] [3] [4] [5] [6]  下一页


Tag:Javascript教程javascript视频教程,javascript教程下载电脑知识学习 - 网页制作 - Javascript教程
Copyright 学会吧 All Right Reserved.
在线学习社区!--学会吧
1 2 3 4 5 6 7 7 8 9 10 11 12 13