开发者问题收集

Javascript 错误:TypeError:'null' 不是 safari 上的对象(评估'event.target')

2016-02-02
3325

我在集成 JavaScript 语法时遇到了困难。我的代码可以在 Internet Explorer (IE) 上运行。但是,在 Safari 上运行它时遇到了 JavaScript 错误。

这是我的测试代码:

document.onmouseup = function hideaddrspopup () {   
    if (event.srcElement.id != 'fieldName') {   
        alert(event.srcElement.id);
    }
}

我尝试了类似这样的操作:

document.onmouseup = function hideaddrspopup() {    
    if (event.srcElement.id != 'fieldName' || event.target.id != 'fieldName') { 
        alert(event.srcElement.id);
        alert(event.target.id);
    }
}

但是控制台上仍然出现错误:

'TypeError: 'null' is not an object (evaluating 'event.target')'

我知道 event.scrElement 仅在 IE 中有效。如何使其在其他浏览器上运行?

3个回答

根据 MDN

This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

Event.srcElement 是标准 Event.target 属性的专有别名。它特定于旧版本的 Microsoft Internet Explorer。

因此,请避免使用 event.srcElement,而应使用 event.target

Bhojendra Rauniyar
2016-02-02

正如 Bhojendra 所提到的,不要使用 srcElement 。在访问 idtarget 属性之前,请检查对象是否为空,如下所示。

document.onmouseup = function hideaddrspopup () 
{   

if (e && e.target && e.target.id!='fieldName')
  {   
    alert(e.target.id);
  }
else if(e && e.srcElement && e.srcElement.id!='fieldName')
  {
    alert(e.srcElement.id);
  }
}

使用 else if 进行了更新,以支持旧版 IE 浏览器。 target 也应该支持它,但您可以在不使用 else 部分的情况下测试它是否必要。

pratikpawar
2016-02-02

您的函数中缺少事件变量

document.onmouseup = function hideaddrspopup (event) 
{   

   if (event.srcElement.id != 'fieldName' || event.target.id != 'fieldName')
   {   
     alert(event.srcElement.id);
     alert(event.target.id);
   }
}
Reniel Ramos Salvador
2016-02-02