Javascript IE8 onclick处理程序事件
我已经阅读了quirksmode.org上的大部分相关文章,但我仍然不确定这篇文章: 使我的应用程序与IE8兼容(乐趣)我在尝试将onclick事件设置为链接时遇到以下问题:Javascript IE8 onclick处理程序事件,javascript,internet-explorer,Javascript,Internet Explorer,我已经阅读了quirksmode.org上的大部分相关文章,但我仍然不确定这篇文章: 使我的应用程序与IE8兼容(乐趣)我在尝试将onclick事件设置为链接时遇到以下问题: function myClickHandler(event) { alert(event); } var link = document.getElementById("myLink"); link.onclick = myClickHandler; //first option 与之相反: function
function myClickHandler(event)
{
alert(event);
}
var link = document.getElementById("myLink");
link.onclick = myClickHandler; //first option
与之相反:
function myClickHandler(event)
{
alert(event);
}
var link = document.getElementById("myLink");
link.onclick = function() {
myClickHandler(event); //second option
}
使用第一个选项,myClickHandler会提醒未定义的。使用第二个选项会提醒[object Event]
,这使我相信第一个选项没有将事件对象传递给处理程序。为什么IE8上会这样
注意:我不想使用attachEvent,因为我想在执行过程中覆盖单个侦听器,而且onclick
似乎很适合这里。是的,一旦我需要在窗口上处理click事件并使用IE8中的target
属性,事件对象就不会作为参数传递给IE中的DOM0样式的事件处理程序
我在项目中使用的解决方案:
document.onclick = function(event) {
event = event || fixEvent.call(this, window.event);
var target = event.target || event.srcElement;
var className = target.className;
// ....
};
//For IE8
// source: https://learn.javascript.ru/fixevent
function fixEvent(e) {
e.currentTarget = this;
e.target = e.srcElement;
if (e.type == 'mouseover' || e.type == 'mouseenter') e.relatedTarget = e.fromElement;
if (e.type == 'mouseout' || e.type == 'mouseleave') e.relatedTarget = e.toElement;
if (e.pageX == null && e.clientX != null) {
var html = document.documentElement;
var body = document.body;
e.pageX = e.clientX + (html.scrollLeft || body && body.scrollLeft || 0);
e.pageX -= html.clientLeft || 0;
e.pageY = e.clientY + (html.scrollTop || body && body.scrollTop || 0);
e.pageY -= html.clientTop || 0;
}
if (!e.which && e.button) {
e.which = e.button & 1 ? 1 : (e.button & 2 ? 3 : (e.button & 4 ? 2 : 0));
}
return e;
}
伟大。谢谢你的回答。
document.onclick = function(event) {
event = event || fixEvent.call(this, window.event);
var target = event.target || event.srcElement;
var className = target.className;
// ....
};
//For IE8
// source: https://learn.javascript.ru/fixevent
function fixEvent(e) {
e.currentTarget = this;
e.target = e.srcElement;
if (e.type == 'mouseover' || e.type == 'mouseenter') e.relatedTarget = e.fromElement;
if (e.type == 'mouseout' || e.type == 'mouseleave') e.relatedTarget = e.toElement;
if (e.pageX == null && e.clientX != null) {
var html = document.documentElement;
var body = document.body;
e.pageX = e.clientX + (html.scrollLeft || body && body.scrollLeft || 0);
e.pageX -= html.clientLeft || 0;
e.pageY = e.clientY + (html.scrollTop || body && body.scrollTop || 0);
e.pageY -= html.clientTop || 0;
}
if (!e.which && e.button) {
e.which = e.button & 1 ? 1 : (e.button & 2 ? 3 : (e.button & 4 ? 2 : 0));
}
return e;
}