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 不工作的主要内容,如果未能解决你的问题,请参考以下文章

我禁用了 IE 增强的安全性,但 IE 不工作

IE10 console.log 不工作

<!--[if !IE]> 不工作

jquery 在 iframe 内的 IE 中不工作 其他浏览器正常工作

在角度6中修改数组数据后,视图未更新

CSS pie 在 IE 8 中不工作,但在 IE 9 中工作