【问题标题】:Feature detection is not working for events in Internet Explorer功能检测不适用于 Internet Explorer 中的事件
【发布时间】:2019-09-22 16:56:58
【问题描述】:

我正在尝试编写一个跨浏览器的事件添加方法,但它在 IE 中根本不起作用,这是代码:

index.html

<!doctype html>
<html>
    <head>
    </head>

    <body>            
        <script type="text/javascript" src="helper.js"></script>
        <script type="text/javascript" src="script.js"></script>
    </body>

</html>

helper.js

var eventUtil = {

    add : function(el, type, fn){
        if(typeof(addEventListener) !== "undefined"){
            el.addEventListener(type, fn, false);
        } else if (typeof(attachEvent) !== "undefined"){
            el.attachEvent("on"+type, fn);  
        } else {
            el["on"+type] = fn;
        }
    }    
}

script.js

(function(){
    var printMsg= function(){            
        document.write("hello");
    };
    eventUtil.add(document.body, "click" , printMsg);
}());

【问题讨论】:

    标签: javascript cross-browser dom-events browser-feature-detection


    【解决方案1】:

    你需要做的:

    add : function(el, type, fn){
        if(typeof(el.addEventListener) !== "undefined"){
            el.addEventListener(type, fn, false);
        } else if (typeof(el.attachEvent) !== "undefined"){
            el.attachEvent("on"+type, fn);  
        } else {
            el["on"+type] = fn;
        }
    

    如你所愿:

        if(typeof(addEventListener) !== "undefined"){
    

    这将永远是 undefined,因为 addEventListener 不是全局变量/函数,它是元素上的方法。

    【讨论】:

    • 其实如果定义了window.addEventListener,就定义了addEventListener。
    • @kennebec - 这与我所说的没有什么不同 - 我不确定您要添加什么新信息。 window.addEventListener 与名为 addEventListener 的全局变量/函数相同,因为浏览器中的全局 javascript 命名空间是 window
    猜你喜欢
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多