HTML <select>перестает запускать onchange или onblur, когда iOS 11 Webview теряет фокус - PullRequest
0 голосов
/ 29 октября 2018

Я занимаюсь разработкой гибридного (веб + родного) приложения для iOS. Веб-часть приложения представляет собой SPA в WKWebView (который находится в UINavigationController). На сайте есть элемент <select> с обработчиком onchange / onblur. Когда пользователь касается элемента <select>, появляется собственное колесо выбора. Затем, когда пользователь нажимает кнопку «Готово» собственного средства выбора, обработчики onchange и onblur запускаются немедленно. Это все работает, как ожидалось.

Поскольку это гибридное приложение, бывают случаи, когда приложение помещает контроллер представления в UINavigationController (поверх веб-представления). Когда этот контроллер представления отключен и фокус возвращается к веб-представлению, кажется, что все работает так, как раньше.

Однако элементы <select> теперь будут запускать события onchange и onblur только тогда, когда пользователь нажимает на расстоянии от элемента. Если пользователь обновляет свой выбор и нажимает Готово, средство выбора будет отклонено, но значение элемента выбора останется неизменным. Только после нажатия за пределами элемента значение будет обновлено и события onchange / onblur сработают.

Неважно, когда новый контроллер представления помещается и выталкивается, даже если это происходит до того, как элемент <select> был создан. Если в какой-либо момент в течение жизненного цикла веб-представления оно закрывается новым контроллером представления, эта ошибка будет возникать 100% времени, пока веб-представление не будет уничтожено.

Пример кода (здесь нет ничего особенного):

HTML:

<select id="mySelect">
    <option value="A">A</option>
    <option value="B">B</option>
    <option value="C">C</option>
</select>

JS:

document.getElementById("mySelect").onchange = function() {
    console.log("hello");
}

Эта проблема возникает только для iOS 11 и 12. Это ошибка, специфичная для Mobile Safari? Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 08 февраля 2019

Я недавно обнаружил, что если вы добавите optgroup s в выборку, события, похоже, будут срабатывать правильно. Я добавляю пустые к выборке, и это, кажется, работает на данный момент.

...