#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.