Как обнаружить отмену выбора файла input file через JS в мобильных браузерах?
Проблема заключается в том, что на desktop браузерах отлично работает метод с document.body.onfocus, где можно отследить что кол-во файлов равно нулю.
А вот в мобильных браузерах этот фикс не работает. Как можно отследить отмену выбора файла в мобильных браузерах?
Maxim Kirshin, при отмене files.length равен нулю. Но сложность в другом, в том что нет события при котором проверять этот параметр. Change срабатывает только если выбрать другой файл, а если выбран тот же или не выбран вообще, событие не срабатывает.
Надим Закиров, смеетесь что ли?)) и до каких пор setInterval будет грузить веб приложение своими циклами?
Это как чаты в нулевых на setInterval делали)))
Alex, если события change и input не работает, то выход. Насчет же того, что он будет грузить страницу - бред. Нагрузка от использования setInterval для проверки массива файлов крайне мала, браузер пользователя ее даже не заметит. Выставьте там проверку раз в пол секунды и сойдет.
P. S. Если вас так сильно беспокоит нагрузка, то вы можете запускать циклическую проверку лишь после клика на выбор файла, а далее ждать изменения коллекции файлов, после чего снимать setInterval.
Надим Закиров, ну и как это работать будет? создался input произошел клик и вызов диалога выбора файла, нажали отмену. В коллекции как было ноль так и будет дальше.Невозможно понять все равно когда окно выбора файла закрылось, что требуется для работы скрипта.
Поэтому здесь нужно что то вроде change или хотя бы аля фикс события focus по body, чтобы понимать что пользователь вернулся к веб приложению.
Alex, ну хорошо. Однако я не понимаю, зачем вам это вообще нужно. Допустим, юзер открыл окно выбора файла, но не выбрал ничего и закрыл все обратно. Что страшного в этом случае случиться? Ну не будет в форме файлов, но так и должно быть, раз пользователь отменил выбор файла.
Надим Закиров, это связано с функционалом веб приложение. Например, выполнять какие то функции после закрытия окна. В Desktop все работает благодаря onfocus на body. А в мобильном браузере это не работает.
Alex, ну хорошо, нельзя выбор файла осуществлять в новом окне? Создать окно при помощи window.open() и там дать пользователю две кнопки: Выбрать файл и Я передумал выбирать файл, верните меня обратно.
Вторая кнопка закрывает окно через window.close() и тогда в родительском окне вполне себе можно отследить onfocus и ваше приложение сможет реагировать на него.
Надим Закиров, открывать новые окна нельзя веб приложение работает в мини аппс Вк. Да и это не красиво, даже обычно в сети, особенно учитывая как эти окна не любят браузеры из-за негативного опыта пользователя, когда такими окнами делали спам и рекламу.