window.onerror获取元素目标



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

来源:

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

out:

ReferenceError:a未定义

在HTMLButtonElement.onclick(oneror.html:1)

这是什么";HTMLButtonElement.onclick"

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

首先,我强烈建议您不要使用内联onclick事件处理程序,因为您遇到了这个问题-它们非常难以调试,并且不能促进关注点的分离(html用于标记,js文件用于逻辑)。

其次,覆盖oneror处理程序也是有风险的,因为您不知道第三方代码(如果有的话)可能会从oneror处理器中得到什么。这与"不要覆盖基本对象,例如Array.map = function() {}; "的规则相同

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

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

下面是一个展示示例的JSFiddle。

最新更新