- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想知道如何分别正确使用addEventListener
attachEvent
?
window.onload = function (myFunc1) { /* do something */ }
function myFunc2() { /* do something */ }
if (window.addEventListener) {
window.addEventListener('load', myFunc2, false);
} else if (window.attachEvent) {
window.attachEvent('onload', myFunc2);
}
// ...
或
function myFunc1() { /* do something */ }
if (window.addEventListener) {
window.addEventListener('load', myFunc1, false);
} else if (window.attachEvent) {
window.attachEvent('onload', myFunc1);
}
function myFunc2() { /* do something */ }
if (window.addEventListener) {
window.addEventListener('load', myFunc2, false);
} else if (window.attachEvent) {
window.attachEvent('onload', myFunc2);
}
// ...
?
这个跨浏览器是否安全,或者我应该更好地使用这样的东西:
function myFunc1(){ /* do something */ }
function myFunc2(){ /* do something */ }
// ...
function addOnloadEvent(fnc){
if ( typeof window.addEventListener != "undefined" )
window.addEventListener( "load", fnc, false );
else if ( typeof window.attachEvent != "undefined" ) {
window.attachEvent( "onload", fnc );
}
else {
if ( window.onload != null ) {
var oldOnload = window.onload;
window.onload = function ( e ) {
oldOnload( e );
window[fnc]();
};
}
else
window.onload = fnc;
}
}
addOnloadEvent(myFunc1);
addOnloadEvent(myFunc2);
// ...
AND:假设 myfunc2
仅适用于 IE 7。如何相应地修改正确/首选方法?
最佳答案
两者的用法相似,但事件参数的语法略有不同:
所有主流浏览器(FF、Chrome、Edge)均支持
obj.addEventListener('click', callback, false);
function callback(){ /* do stuff */ }
Events list对于 addEventListener
。
IE 5-8 支持*
obj.attachEvent('onclick', callback);
function callback(){ /* do stuff */ }
Events list对于 attachEvent
。
对于这两种方法,参数如下:
addEventListener
) 如果为真,表示用户希望启动 capture .这两种方法都用于实现将事件附加到元素的相同目标。
不同之处在于 attachEvent
只能用于较旧的 trident渲染引擎(IE5+ IE5-8*)和addEventListener
是在大多数其他浏览器(FF、Webkit、Opera、IE9+)中实现的 W3 标准。
对于稳固的跨浏览器事件支持,包括您无法通过 Diaz 解决方案获得的规范化,请使用 framework .
*为了向后兼容,IE9-10 支持这两种方法。
感谢Luke Puplett指出 attachEvent
已从 IE11 中删除。
作为Smitty推荐你可以用这个Dustin Diaz不使用框架的可靠跨浏览器实现的 addEvent 实现:
function addEvent(obj, type, fn) {
if (obj.addEventListener) {
obj.addEventListener(type, fn, false);
}
else if (obj.attachEvent) {
obj["e"+type+fn] = fn;
obj[type+fn] = function() {obj["e"+type+fn](window.event);}
obj.attachEvent("on"+type, obj[type+fn]);
}
else {
obj["on"+type] = obj["e"+type+fn];
}
}
addEvent( document, 'click', function (e) {
console.log( 'document click' )
})
关于javascript - addEventListener()/attachEvent() 的正确用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2657182/
我在循环中使用下面的代码。只要我不使用 IE,它就可以工作。 var remove = document.createElement("input"); remove.type = "button";
我真的不明白 AttachEvent 类或 addAttachHandler 是什么。这有什么用呢?有人可以为此发布一个例子吗?非常感谢。 最佳答案 AttachEvent 会在 Widget 附加到
我正在尝试在 JavaScript 中做水平下拉菜单。它在 Firefox 和 Chrome 上运行良好,但在 IE 中却给我带来了麻烦。 这是我的代码: function init(){
我正在尝试构建一个 JavaScript 模块以更好地理解该模式。我正在尝试使用 addEventListener 和 attachEvent 将点击事件附加到按钮,但我无法让我的 console.l
我需要交叉兼容 IE7 向上作为事件监听器。由于我使用的系统,我只能使用外部 js 文件来创建监听器。我希望为所有文本区域框创建一个规则,使它们在包裹文本时增加高度,这意味着您永远不必滚动(它们需要打
我使用这段 jQuery 来启用我页面上的按钮来切换 div。 var SnapEnable = document.getElementById('open-right'); $(SnapEnable
我有一个如下所示的按钮 并且,我尝试在单击此按钮时发出警报,如下所示 document.querySelector('input[type="button"]').attachEvent('onc
我正在尝试将事件附加到 Brightcove 视频,但无法触发它。已遵循 Brightcove 文档中的所有步骤。这是我的代码:
我在使 attachEvent 起作用时遇到了问题。在所有支持 addEventListener 处理程序的浏览器中,下面的代码就像一个魅力,但在 IE 中是一个彻头彻尾的灾难。他们有自己的(不完整的
在 IE 中使用 .attachEvent() 方法,如何使用 this?在 普通 浏览器中,使用 .addEventListener,var this 指向元素,而在 IE 中它指向 窗口对象。 我
我想知道如何分别正确使用addEventListenerattachEvent? window.onload = function (myFunc1) { /* do something */ } f
我的下面的代码在 IE 9 中工作正常,但是当我使用 Chrome 时,我收到错误'element has no method"attachEvent"'。我尝试使用.on 以及 addEventLi
我正在使用 JS 库 - Mousetrap v1.6.1 作为键盘快捷键。 我的 HTML 页面上有 2 个表单:billheaderfrm 和 billfooterfrm。我使用下面的代码绑定(b
我有以下代码... document.attachEvent("onclick", get_func(obj, "on_body_click", "event_target_here")); 我将全局
如果我在 IE11 中按下表单发送按钮“Saada”,我会收到错误消息: Object doesn't support property or method 'attachEvent' 我发现这是一个
我有以下代码以符合 Shiny 标准的方式调用 Javascript 函数:)。请注意,我必须将 elementsList[i] 发送到该函数(this 关键字将不合适),因为事件监听器正在附加到它的
有人知道 obj.attachEvent 在 ie 上是如何工作的吗? 我尝试了几个示例,但它们不起作用。这也与 ie7 兼容吗? 我试过的是这样的: var onload = function( )
我必须将参数传递给 validateNum Javascript 函数(例如 num1、num2) if (num1.attachEvent) { num1.attachEvent("onkeypr
在 jQuery 中,如果我这样做... $('a').click(function(){ // Do something }); ...点击事件存储在 $('a').data('events
我有一个使用 Javascript 的页面,其中我需要一个函数来监听从服务器接收的数据。基本上,只要它到达服务器,我就需要触发该函数。 这看起来非常简单 - 但到目前为止,我尝试过的任何东西都不起作用
我是一名优秀的程序员,十分优秀!