我正在创建图像并附加一个onload
处理程序,该处理程序在发生不良情况时会调用onerror
:
var image = new Image();
image.onload = function() {
let img = this as HTMLImageElement;
if (...) {
img.onerror();
}
};
但是我在img.onerror()
行中遇到此错误:
TS2554 Expected 1 argument but got 0
我该如何解决? onerror
的预期参数是什么?
答案 0 :(得分:1)
如GlobalEventHandlers.onerror的MDN文档中所述:
的单个参数的函数
element.onerror
接受一个具有类型Event
这适用于所有元素类型,包括HTMLImageElement
。对于错误处理程序,使用ErrorEvent
对象似乎是合乎逻辑的,因此您可以在代码中执行以下操作:
if (...) {
let event = new ErrorEvent('error', {
message: 'Something bad happened.'
});
img.onerror(event);
}
但是,请注意,以上代码仅立即调用附加的事件处理程序(如果未将img.onerror
设置为函数,则该操作将失败)。
一个更优雅的解决方案是仅触发事件,然后让浏览器以与处理所有其他事件相同的方式处理该事件,包括冒泡到父元素等。您可以通过替换img.onerror(event)
来轻松实现与img.dispatchEvent(event)
。
有关触发事件的更多信息,请参见this MDN page。