以前写 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);
}
注意:attachEvent 所指派的多个过程的执行顺序是随机的,所以这几个过程之间不要有顺序依赖。另外 attachEvent 和 addEventListener 不仅仅适用于 window 对象,其他的一些对象也支持该方法。
分享到:
相关推荐
### IE11没有window.attachEvent方法处理方法 在Web开发过程中,我们经常需要处理各种浏览器兼容性问题。其中,Internet Explorer(简称IE)一直是开发者关注的重点之一,尤其是IE10及以下版本。随着技术的发展,IE...
今天一个客户用chrome浏览器访问网站,他的网站js提示self.attachevent is not a function,这个问题就是这个浏览器不支持attachevent,可以通过如下方法解决了,分享一下,需要的朋友可以参考下
这时就要用window.attachEvent和window.addEventListener来解决一下。 下面是一个解决方法。至于attachEvent和addEventListener的用法,可以自己Google或百度一下。 代码如下: if (document.all){ window....
对于IE,使用`attachEvent`和`fireEvent`;对于非IE,使用`addEventListener`和`dispatchEvent`。 5. 提交表单后,从文档中移除这个临时创建的表单。 在提供的代码中,`openPostWindow`函数就是实现这一过程的。它...
在IE中,可以使用 `attachEvent` 添加 `window.onload` 事件,而在其他浏览器中则使用 `addEventListener`: ```javascript var script = document.createElement('script'); script.textContent = 'console.log(...
部分代码如下: Author:sohighthesky ... *Date:2009-11-9 */ /* *box 指定要显示消息框或者其id *options:参见代码中setOptions中的注释 */ var sheyMsg=function(box,... else window.attachEvent("on"+e,call); },
- 另一个判断IE的方法是通过判断window对象是否存在addEventListener或attachEvent属性,这两者分别用于现代浏览器和旧版IE浏览器的事件处理。 - browerType函数通过分析userAgent字符串来判断用户的设备类型,比如...
POST方式则可以解决这些问题,但默认的`window.open`方法并不支持以POST方式提交数据。本文将介绍两种在JavaScript中使用`window.open`以POST方式将内容提交到新窗口的方法。 ### 方法一: 这种方法是通过动态创建...
if (window.attachEvent) { ele.attachEvent('on' + event_name, fun); // IE浏览器 } else { event_name = event_name.replace(/^on/, ""); // 如果on开头,删除on ele.addEventListener(event_name, fun, ...
在JavaScript中,`window.js`通常是一个用于处理与浏览器窗口或页面交互的脚本文件。这个文件中的功能主要集中在获取和操作页面上的元素,以及处理与这些元素相关的样式和事件。以下是对`window.js`中部分代码的详细...
在IE6和IE7浏览器中,因为不支持addEventListener()方法,可以使用attachEvent()作为替代。同时需要注意的是,为了安全,应当检查event.origin是否是可信的源。 window.postMessage()方法的优点是强大且灵活,但是...
window.attachEvent("onload", google_map_onload); window.attachEvent("onunload", GUnload); } //]]> </script>'; } } ``` #### JavaScript部分 JavaScript部分主要负责加载Google Maps API脚本、检测...
window.attachEvent('onmessage', function(event) { console.log('Parent event received:', event.data); }); } else if (window.addEventListener) { // Firefox, Chrome, etc. window.addEventListener('...
此外,还可以通过 `attachEvent` 方法来绑定事件处理函数: ```javascript gantt.attachEvent("onTaskDblClick", function (id, e) { return false; // 禁止双击事件 }); ``` ##### 2. 自定义样式和行为 - **列...
`window.name`是浏览器窗口的一个特殊属性,即使页面重载或URL改变,其值仍能保持不变。这一特性使得`window.name`成为跨域数据传输的一种方法。下面我们将通过实例来分析如何利用`window.name`实现跨域通信。 首先...
//调用微信JS api 支付 function jsApiCall() { WeixinJSBridge.invoke( ... document.attachEvent("onWeixinJSBridgeReady", jsApiCall); } }else{ jsApiCall(); } } callpay(); </script>
如果不支持,它会使用IE特有的`attachEvent`方法。以下是这个函数的代码: ```javascript var addEvent = function( obj, type, fn ) { if (obj.addEventListener) obj.addEventListener( type, fn, false ); ...