博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈window.attachEvent
阅读量:4709 次
发布时间:2019-06-10

本文共 2524 字,大约阅读时间需要 8 分钟。

以前写 JavaScript 脚本时,事件都是采用

object.event = handler;
的方式初始化。这种方式对于 Internet Explorer、Mozilla/Firefox 和 Opera 来说很通用。但是有一个问题就是,这种方式只能一个事件对应一个事件处理过程。如果希望一个事件可以依次执行多个处理过程就不好用了。

但是 Internet Explorer 从 5.0 开始提供了一个 attachEvent 方法,使用这个方法,就可以给一个事件指派多个处理过程了。attachEvent 对于目前的 Opera 也适用。但是问题是 Mozilla/Firefox 并不支持这个方法。但是它支持另一个 addEventListener 方法,这个方法跟 attachEvent 差不多,也是用来给一个事件指派多个处理过程的。但是它们指派的事件有些区别,在 attachEvent 方法中,事件是以 “on” 开头的,而在 addEventListener 中,事件没有开头的 “on”,另外 addEventListener 还有第三个参数,一般这个参数指定为 false 就可以了。

因此要想在你的程序中给一个事件指派多个处理过程的话,只要首先判断一下浏览器,然后根据不同的浏览器,选择使用 attachEvent 还是 addEventListener 就可以了。实例如下:

 

            if (window.attachEvent) { 

                window.attachEvent("onload", remove); 
            } else if (window.addEventListener) { 
                window.addEventListener("load", remove, false);   
            }             
            function remove() { 
                var div = document.getElementById("divprogressbar"); 
                document.body.removeChild(div); 
            }

=============或者也可以用

 

 
一.
 document.all是页面内所有元素的一个集合。例如:      
 document.all(0)表示页面内第一个元素
二.
document.all可以判断浏览器是否是IE  
  if(document.all){  
    alert("is   IE!");  
  }
三.
也可以通过给某个元素设置id属性(id=aaaa),然后用document.all.aaaa调用该元素
四.
案例:
代码1:    
  <input   name=aaa   value=aaa>  
  <input   id=bbb   value=bbb>   
  <script   language=Jscript>  
      alert(document.all.aaa.value)     //根据name取value  
      alert(document.all.bbb.value)     //根据id取   value  
  </script>    
代码2:  
      但是常常name可以相同(如:用checkbox取用户的多项爱好的情况)   
  <input   name=aaa   value=a1>  
  <input   name=aaa   value=a2>  
  <input   id=bbb   value=bbb>   
  <script   language=Jscript>  
      alert(document.all.aaa(0).value)     //显示a1  
      alert(document.all.aaa(1).value)     //显示a2  
      alert(document.all.bbb(0).value)     //这行代码会失败  
  </script>    
代码3:  
      理论上一个页面中的id是互不相同的,如果出现不同tags有相同的id  
  document.all.id   就会失败,就象这样:  
  <input   id=aaa   value=a1>  
  <input   id=aaa   value=a2>  
  <script   language=Jscript>  
      alert(document.all.aaa.value)     //显示   undefined   而不是   a1或者a2  
  </script>   
代码4:  
 对于一个复杂的页面(代码很长,或者id是由程序自动产生),或着一个  
  javascript初学者写的程序,很有可能出现两个tags有相同id的情况。  
 为了编程的时候不出错,我推荐这样的写法:  
   
  <input   id=aaa   value=aaa1>  
  <input   id=aaa   value=aaa2>  
  <input   name=bbb   value=bbb>  
  <input   name=bbb   value=bbb2>  
  <input   id=ccc   value=ccc>  
  <input   name=ddd   value=ddd>  
   
  <script   language=Jscript>  
      alert(document.all("aaa",0).value)    
      alert(document.all("aaa",1).value)    
      alert(document.all("bbb",0).value)    
      alert(document.all("bbb",1).value)    
      alert(document.all("ccc",0).value)    
      alert(document.all("ddd",0).value)    
  </script>  

if (document.all){window.attachEvent('onload',remove)}//IE

else{window.addEventListener('load',remove,false);} //FireFox

注意:attachEvent 所指派的多个过程的执行顺序是随机的,所以这几个过程之间不要有顺序依赖。另外 attachEvent 和 addEventListener 不仅仅适用于 window 对象,其他的一些对象也支持该方法。

转载于:https://www.cnblogs.com/opret/p/4533265.html

你可能感兴趣的文章
wpf 快速建立可以拖动对象
查看>>
cookie和session
查看>>
url为什么要编码及php中的中文字符urlencode基本原理
查看>>
OSX 10.10.5 编译android 5.1.1源码
查看>>
iOS: Assertion failure on picker view
查看>>
sublime text2的插件熟悉
查看>>
Windows 下 Chrome 快捷键大全
查看>>
PHP定时执行计划任务
查看>>
推荐putty远程工具背景效果
查看>>
php安装swoole扩展
查看>>
h5前期js知识点10月19日总结
查看>>
《Python 机器学习》笔记(四)
查看>>
C++标准库之泛型算法
查看>>
MyBatis—mybatis-config.xml模板
查看>>
(九十六)借助APNS实现远程通知、后台任务
查看>>
Winform下实现图片切换特效的方法
查看>>
使用 Git 和 Visual Studio Online 进行版本控制
查看>>
AJAX中UPDATEPANEL配合TIMER控件实现局部无刷新
查看>>
html之marquee
查看>>
JS Map对象
查看>>