javascript - 在多个浏览器中附加事件

标签 javascript internet-explorer cross-browser dom-events

我有一个必须在元素 newElement 上附加事件的函数,我根据 attachEvent 属性检查了其 IE 还是 Firfox 的条件(仅适用于 IE) )。

if ( typeof(newElement.attachEvent) != "undefined" )
{               
    newElement.attachEvent("onclick", deleteRow) ;  
    newElement.attachEvent("onclick", customDeleteScript) ;
}else
{   

    newElement.addEventListener("click", deleteRow, false) ;    
    newElement.addEventListener("click", customDeleteScript, false) ;               
} 

所需的流程是首先执行deleteRow,然后执行customDeleteScript 它在 Firefox/Chrome 中工作正常,但 IE 中的流程发生变化 customDeleteScript 在 IE 中的 deleteRow 之前执行。所以我必须这样做:

if ( typeof(newElement.attachEvent) != "undefined" )
{               
    newElement.attachEvent("onclick", customDeleteScript) ;
    newElement.attachEvent("onclick", deleteRow) ;  
}else
{   

    newElement.addEventListener("click", deleteRow, false) ;    
    newElement.addEventListener("click", customDeleteScript, false) ;               
} 

这里的问题在于,这是 IE 的属性还是只是 IE 的随机点击和试用场景?

编辑:如果我的函数包含一些参数,例如 this 和其他参数,并且我不知道哪个函数采用哪些参数,该怎么办?

最佳答案

如果顺序很重要,则不应使用单独的事件处理程序。从一个事件处理程序中按照所需的顺序调用这两个函数,如下所示:

function delete() {
    deleteRow();
    customDeleteScript();
}

if ( typeof(newElement.attachEvent) != "undefined" )
{               
    newElement.attachEvent("onclick", delete) ;  
}else
{   

    newElement.addEventListener("click", delete, false) ;    
} 

仅供引用,您可以重用的通用事件处理函数的工作原理如下:

function addEvent(elem, event, fn) {
    if (elem.addEventListener) {
        elem.addEventListener(event, fn, false);
    } else {
        elem.attachEvent("on" + event, function() {
            // set the this pointer same as addEventListener when fn is called
            return(fn.apply(elem, arguments));   
        });
    }
}

请注意,最好先检查 addEventListener,这样如果两种方法都存在(如 IE9 中),您的代码将使用标准方式。

所以,你的代码可以像这样工作:

addEvent(newElement, 'click', function() {
    deleteRow();
    customDeleteScript();
});

关于javascript - 在多个浏览器中附加事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722514/

相关文章:

html - 图像在 Chrome/Firefox 和 Safari 中显示不同

javascript - 在 Javascript 中解析 ISO 8601 日期

php - 图像验证在 IE 中返回 -1

css - 如何通过css去除IE浏览器中选中的选项背景颜色?

c# - 当使用 Windows 8 而不是 Windows 7 时,Google Api Redirect 在 WP7 上给我 404 错误

html - 在 HTML 中,一个选中的、禁用的选项元素会发生什么?

javascript - 在预定义 Material 中混合纹理

javascript - 如何通过 javascript/jquery 对表行列表进行排序?

javascript - 现在我有一个包含文本和表格的html表单,我想在一个简单的文本文件中保存和检索数据,如何实现?

CSS - 为什么这在 Firefox/IE/Chrome 中表现不同?