2016-04-14 99 views
4

如何在javascript中的事件错误中获取元素目标?window.onerror获取元素目标

来源:

<button onclick="a(this);">GO!</button> 
<script> 
window.onerror = function(message, source, lineno, colno, error) { 
    console.log(error.stack); // event.target = window 
} 
</script> 

出来:

ReferenceError: a is not defined

at HTMLButtonElement.onclick (onerror.html:1)

这是什么 “HTMLButtonElement.onclick”?

var domID = "HTMLButtonElement".id; 
addLog(document.querySelector(domID)); //example usage 
+0

没有办法摆脱使用onerror的元素。 – epascarello

回答

0

首先我会强烈建议您不要使用内联onclick事件处理程序,因为你所遇到的问题 - 他们非常努力,调试和不提倡的关注(HTML是分离 - 标记,js文件是逻辑)。其次,覆盖onerror处理程序也是有风险的,因为您不知道第三方代码(如果有的话)可能期望来自onerror处理程序。这与“不要覆盖基础对象”的规则相同,例如,Array.map = function() {};

但是,在这种情况下获取元素的方法是以不同方式编写事件处理程序以捕获错误并重新获取可用元素信息-throw。

button.addEventListener('click', function() { 
    try { 
     a(this); 
    } catch (e) { 
     e.message = e.message + " - element clicked: " + this.id; 
     throw e; 
    } 
}); 

这里有一个JSFiddle显示的例子。