IE e.target.id 不工作
Posted
技术标签:
【中文标题】IE e.target.id 不工作【英文标题】:IE e.target.id is not working 【发布时间】:2010-11-11 16:58:27 【问题描述】:document.click = check;
function check(e)
var obj = document.getElementById('calendar_widget');
if (obj != 'null')
if (e.target.id != 'show_calender')
obj.style.display='none';
Internet Explorer 出现错误:e.target.id 未定义。
【问题讨论】:
发帖前查看帖子真的有那么难吗?这次我为你修复了代码,至少是一点点。您希望其他人花时间查看您的代码,因此请花时间使其可读。仍有一些格式需要为您完成。 我不知道如何插入代码.. 我从哪里得到这些信息 当你输入代码时,选择它并按下上面有“101 010”的按钮 @midhun:点击您输入问题/答案的上方和右侧的帮助按钮:***.com/editing-help 这将在代码前添加一个换行符,并在每行的开头添加 4 个空格 【参考方案1】:IE 不支持 target 属性,他们使用 srcElement 代替。
变化:
if (e.target.id != 'show_calender')
到:
if ((e.target || e.srcElement).id != 'show_calender')
您可能还需要将此添加到函数的开头:
if (!e) e = window.event
您的最终代码如下所示:
function check(e)
if (!e) e = window.event;
var obj = document.getElementById('calendar_widget');
if (obj != 'null')
if ((e.target || e.srcElement).id != 'show_calender')
obj.style.display='none';
【讨论】:
如果 IE 不支持target
属性,那么您的代码 e.target.id
将在 IE 命中时出现空引用错误。
我认为(e.target.id || e.srcElement.id)
仍然会在IE中抛出错误,因为它会尝试访问target
属性的id
属性,但target
不存在。
好收获。我已经解决了这个问题。
感谢@Prestaul!很有帮助。【参考方案2】:
IE 不将事件对象作为参数传递,事件对象作为称为event
的全局标识符进行访问。它也没有使用术语目标,而是使用srcElement
。
因此 IE 的等效代码是:-
function check()
var obj = document.getElementById('calendar_widget');
if (obj != 'null')
if (event.srcElement.id != 'show_calender')
obj.style.display='none';
正是因为这个原因,JQuery 等 javascript 框架才如此受欢迎。
【讨论】:
【参考方案3】:您遇到了一个经典的事件处理跨浏览器问题。我建议使用诸如Prototype、JQuery、YUI 或MooTools 之类的库以更简单直接的方式处理此问题。问题是 IE 没有传递事件对象。相反,它可以作为一个全局对象找到。
【讨论】:
【参考方案4】:Internet Explorer 不会将事件对象传递给事件处理程序,而是将其设置为窗口对象的属性。此外,它使用srcElement
而不是target
。试试
document.click = check;
function check(e)
var target = e ? e.target : window.event.srcElement;
var obj = document.getElementById('calendar_widget');
if (obj != 'null')
if (target.id != 'show_calender')
obj.style.display='none';
【讨论】:
另外,它是document.onclick = ...
,而不是document.click = ...
以上是关于IE e.target.id 不工作的主要内容,如果未能解决你的问题,请参考以下文章