最小示例:
<title>a</title>
<body>
<script>
document.body.appendChild(
Object.assign(document.createElement('button'),{
textContent:'A',
onclick(){
// increase the failure rate
//let a=[...Array(1000000)]
let input=document.createElement('input')
Object.assign(input,{
type:'file',
oninput(){
console.log('input')
},
}).click()
// decrease the failure rate (can be considered as "to zero")
//console.log(input)
console.log('click')
},
})
)
</script>
单击按钮后,将创建并单击<input type=file>
,从而创建文件对话框。
示例结束
我认为在通过该文件对话框选择文件后,应始终发出“ input”事件;但有时却没有。
铬:有时会出现
Firefox:总是被模仿
Safari:有时会出现
怀疑这种现象与垃圾回收有关,因为let a=[...Array(1000000)]
似乎增加了不发生“输入”事件的机会;而console.log(input)
则相反。
在不是文档后代的DOM节点上发出事件是否已定义为行为?如果已定义,并且没有其他问题,我会认为是Chromium和Safari错误的结果。