javascript - 添加跨浏览器事件监听器

标签 javascript events

我的问题在这里:为什么这段代码不起作用??? ...该消息未出现

我正在尝试在事件点击时将事件监听器添加到元素 x

    function test()
    {
    alert("test");
    }

var EventsCrossBrowsers = 
 {
    addEvents:(function(element,event,func)
              {
                    if(element.addEventListener)
                    {
                        return elemenet.addEventListener(event,func,false);
                    }
                    else if(elemenet.attachEvent)
                    {
                        return elemenet.attachEvent("on"+event,func);
                    }
              }());
 }

 var x =document.getElementById("test");

EventsCrossBrowsers.addEvents(x,"click",test);

非常感谢jfriend00.... 我认为最简单的方式:-

function test()
{
    alert("test");
}

function addEventsCrossBrowsers(elemenet,event,func)
{
    if(elemenet.addEventListener)
    {
        elemenet.addEventListener(event,func,false);
    }
    else if(elemenet.attachEvent)
    {
        elemenet.attachEvent("on"+event,func);
    }
}
var x =document.getElementById("test");
addEventsCrossBrowsers(x,"click",test);

你的第二种方式几乎是一样的,只是我不明白返回...... 再次感谢您...

最佳答案

在您的函数中,我看到您同时使用了 elemenetelement,它们的拼写应该相同。这至少是问题的一部分。

我还发现您的 addEvents 函数是一个自执行函数,在这方面没有意义。看起来应该只是一个普通的功能。

这是我的跨浏览器事件函数。除了创建一个用于添加事件处理程序的函数之外,它还规范了 this 指针和 events 对象,以便在任何浏览器中也可以对它们进行相同的处理。

// add event cross browser
function addEvent(elem, event, fn) {
    // avoid memory overhead of new anonymous functions for every event handler that's installed
    // by using local functions
    function listenHandler(e) {
        var ret = fn.apply(this, arguments);
        if (ret === false) {
            e.stopPropagation();
            e.preventDefault();
        }
        return(ret);
    }

    function attachHandler() {
        // set the this pointer same as addEventListener when fn is called
        // and make sure the event is passed to the fn also so that works the same too
        var ret = fn.call(elem, window.event);   
        if (ret === false) {
            window.event.returnValue = false;
            window.event.cancelBubble = true;
        }
        return(ret);
    }

    if (elem.addEventListener) {
        elem.addEventListener(event, listenHandler, false);
        return {elem: elem, handler: listenHandler, event: event};
    } else {
        elem.attachEvent("on" + event, attachHandler);
        return {elem: elem, handler: attachHandler, event: event};
    }
}

function removeEvent(token) {
    if (token.elem.removeEventListener) {
        token.elem.removeEventListener(token.event, token.handler);
    } else {
        token.elem.detachEvent("on" + token.event, token.handler);
    }
}

如果您想要一个没有传播和默认预防选项但具有 thisevent 规范化的简单版本,那就是这样:

// add event cross browser
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.call(elem, window.event));   
        });
    }
}

关于javascript - 添加跨浏览器事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10149963/

相关文章:

Javascript:选择页面上的所有复选框。它会检查所有内容一秒钟然后消失

jquery - 防止 iOS 捏合事件注册为点击

javascript - 传入off函数的匿名函数是什么意思?

javascript - Jquery从url读取几个数组参数

javascript - 是否可以为 React 的类模型打开 React.js 自动绑定(bind)

jquery - 如何检测同一个文件的输入类型=文件 "change"?

javascript - 全日历: 'eventAfterRender' 工作不正常

javascript - 在 Node-js 中处理 HTML 事件

javascript - PHP json_encode 到 AJAX,未定义

javascript - 如何在 HTML 中制作 anchor 标记下拉列表