Доброго времени суток уважаемые!
Подскажите пожалуйста, как правильно "вызвать"
click() на элементе после того как он отрендерился?
Суть проблемы, и мои попытки её решения:
methods: {
clickFunction() { //Функция которая "эмулирует" событие "click"
document.querySelector('#myInput').click(); //Вот так - всё работает, проблема только в том, что в этот момент времени элемент ещё не успел отрендерится, по этому "кликать некуда"
//Порывшись в документации VueJS нашел вот такое "решение":
this.$nextTick(function() {
document.querySelector('#myInput').click(); //Не работает
}
//Нашел некий "костыль" призванный исправить сие
setTimeout(function () {
document.querySelector('#myInput').click(); //Но... он тоже не работает
}, 0); //И если добавить времени, например 500 или 1000мс - он тоже не работает
}
}
Можно как-то с этим бороться, и если можно, то как?
P.S. Я в целом понимаю, откуда у проблемы "растут ноги" и имею общее понимание на тему "почему оно именно так"... Я не понимаю, как это правильно решить и можно ли это решить вообще, правильно. Я думаю, задача довольно банальная, "подождать пока элемент отрендерится и что-то с ним сделать".
Элемент - представленный в примере - это FileInput (кликать нужно на него, что бы вызвать диалог выбора файлов), варианты уровня "заменить его на что-то ещё" или "заранее создать миллион инпутов и потом их использовать" и т.п. варианты - отпадают сразу.
Через
this.$refs
тоже пробовал, эффект аналогичный (не работает).
UPD. Алтернативный вариант, для простоты понимания:
methods: {
async clickFunction() {
await this.$nextTick();
document.querySelector('#myInput').click(); //Так работать не будет, но если бы функция не была асинхронной - всё бы работало исправно
}
}