[英]IE8 onclick handler event
我在quirksmode.org上閱讀了大部分相關文章,但我仍然不確定這個:
讓我的應用程序與IE8兼容(有趣的樂趣)我在嘗試將onclick事件設置為鏈接時遇到此問題:
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警告undefined
。 使用第二個選項提醒[object Event]
,這使我相信事件對象沒有被第一個選項傳遞給處理程序。 IE8為何如此?
注意:不想使用attachEvent,因為我想在執行期間覆蓋單個偵聽器,並且onclick
似乎很適合。
是的,事件對象不作為參數傳遞給IE <= 8中的DOM0樣式事件處理程序。您需要從window.event
獲取它。 如果添加一個名為event
的參數,則在IE <= 8中,這將是undefined
並且事件處理程序中對event
引用將解析為undefined參數而不是window.event
。 我通常使用window.event
在代碼中使其顯式:
link.onclick = function(evt) {
evt = evt || window.event;
}
一旦我需要在窗口上處理點擊事件並在IE8中使用target
屬性
我在項目中使用的解決方案:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.