Mar*_*aio 2 javascript events event-handling addeventlistener
我使用这个简单的工作函数来添加事件:
function AppendEvent(html_element, event_name, event_function)
{
if(html_element)
{
if(html_element.attachEvent) //IE
html_element.attachEvent("on" + event_name, event_function);
else if(html_element.addEventListener) //FF
html_element.addEventListener(event_name, event_function, false);
};
}
Run Code Online (Sandbox Code Playgroud)
在做这个简单的测试时:
AppendEvent(window, 'load', function(){alert('load 1');});
AppendEvent(window, 'load', function(){alert('load 2');});
Run Code Online (Sandbox Code Playgroud)
我注意到FF3.6 addEventListener 在事件队列的末尾追加每个新事件,因此在上面的例子中你会得到两个警告,说'加载1''加载2'.
另一方面,IE7 attachEvent在事件队列的开头插入每个新事件,因此在上面的示例中,您将收到警告"加载2"加载1'.
有没有办法解决这个问题并使两者以同样的方式工作?
谢谢!
根据MSDN文档,attachEvent未指定执行顺序(使用的单词是"随机").然而,这与附件的逆序相反并不奇怪.
您可以完全避免这样做,并根据所涉及元素的"on event "属性构建一系列处理程序.或者你可以使用jQuery或类似的东西,如果可能的话.
小智 6
我解决了这个问题:
function addEvent(obj,evtype,func,bubble)
{
try
{
obj.addEventListener(evtype,func,bubble);
}
catch(err) // for bastard IE
{
if(obj["on"+evtype] == null)
obj["on"+evtype] = func;
else
{
var e = obj["on"+evtype];
obj["on"+evtype] = function(){e(); func();}
}
}
}
Run Code Online (Sandbox Code Playgroud)
工作完美
| 归档时间: |
|
| 查看次数: |
2031 次 |
| 最近记录: |