событие 'input' иногда не выдается - PullRequest
0 голосов
/ 11 мая 2019

Минимальный пример:

<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: всегда излучаемый
Сафари: иногда выбрасывают

Предполагается, что это явление связано со сборкой мусора, поскольку let a=[...Array(1000000)], по-видимому, увеличивает вероятность того, что событие input не будет отправлено; в то время как console.log(input) делает обратное.

Это определенное поведение для генерации события на DOM-узле, который не является потомком документа? Если он определен, и больше ничего не происходит, я бы рассматривал это явление как результат ошибки Chromium и Safari.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...