我的问题在这里:为什么这段代码不起作用????? ...邮件没有出现
我正试图在事件点击时向元素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);
Run Code Online (Sandbox Code Playgroud)
非常感谢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);
Run Code Online (Sandbox Code Playgroud)
你的第二种方式几乎是一样的,除了我不理解回报...再次感谢你...
jfr*_*d00 14
在你的功能,我看你同时使用elemenet
,并element
在那里他们应该是相同的拼写.这至少是问题的一部分.
我还看到你的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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想要一个没有传播和默认防护选项的简单版本,但是使用this
和event
规范化,那就是:
// 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));
});
}
}
Run Code Online (Sandbox Code Playgroud)