элемент HTML появляется после удаления в iOS Safari

#javascript #html #ios #select #safari

#javascript #HTML #iOS #выберите #safari

Вопрос:

Я столкнулся с довольно странной ошибкой, которая возникает в Safari на моем iPhone 6 / iOS 10.0.2 и в симуляторе iOS: после <select> того, как элемент был использован и удален из DOM с помощью javascript, он все равно появляется после более позднего события (хотя не совсем уверен, что его вызывает). Вот очень простой пример:

 <html>
    <head>
        <script type="text/javascript">
            function removeSelect() {
                var parent = this.parentNode;
                if (parent != null) {
                    parent.removeChild(this);
                    document.getElementById("div").appendChild(document.createTextNode(parent.tagName));
                }
                else {
                    document.getElementById("div").appendChild(document.createTextNode("null parent"));
                }
            }
            window.onload = function () {
                document.getElementById("sel").addEventListener("input", removeSelect);
            }
        </script>
    </head>
    <body>
        <div id="div">
            <select id="sel">
                <option>first</option>
                <option>second</option>
                <option>third</option>
            </select>
            <button>ABC</button>
        </div>
    </body>
</html>
  

Я тестирую это с помощью сервера Apache2, работающего на моем iMac, получая доступ к странице через Wi-Fi с моего iPhone, так что в основном http://imac.local/test/test.html . Я не ожидаю, что сервер будет иметь какой-либо эффект.

Как вы можете видеть, эта страница мало что делает, просто удаляет элемент <select> из DOM при изменении значения. Это «работает» нормально в любом браузере, т. Е. <select> исчезает и DIV добавляется после кнопки при выборе значения. В Safari на iPhone выбор значения удаляет <select> элемент и добавляет DIV его, но при последующем нажатии кнопки снова <select> отображается меню со всеми исходными параметрами, а текст null parent добавляется DIV после выбора значения. На самом деле это продолжается вечно, т. Е. <select> Всегда срабатывает при нажатии кнопки. То же самое происходит в симуляторе iOS.

Обратите внимание, что нажатие ABC кнопки до фактического изменения значения в <select> не имеет (как и ожидалось) абсолютно никакого эффекта. Также обратите внимание, что если код javascript изменен так, чтобы не удалять <select> , меню не появляется при нажатии кнопки.

Может ли кто-нибудь подтвердить, что это действительно происходит так, как я это испытываю, и есть ли у кого-нибудь представление о том, почему это происходит? Я делаю что-то не так? Если нет, кто-нибудь знает, как я могу предотвратить это?

Большое спасибо!

Комментарии:

1. Похоже на ошибку в Safari на iOS 10. Я вижу аналогичную проблему с клавиатурой, которая появляется снова и снова после удаления <input> из DOM.