2016-09-18 1 views
7

С помощью этой ссылки вы можете воспроизвести ошибку.Проблема с Safari iOS 10 с <select> элемент больше не находится в DOM

https://jsfiddle.net/pw7e2j3q/

<script> 
$("#test").change(function() { 
    $("#test").remove(); 
    var combo = $("<select></select>").attr("id", "test2").attr("name", "test"); 
    combo.append("<option>New One</option>"); 
    $("#App").append(combo); 
}); 

$("#click").click(function(){ 
    $("#App").remove(); 
}) 
</script> 

Если нажать на <select> элемент и удалить его из йот и после этого нажмите на ссылку теста. Вы должны увидеть старый элемент <select> для выбора.

есть ли какой-нибудь взлом, чтобы исправить это?

+1

Спасибо, что поделились точным характером проблемы. Я также сталкиваюсь с той же проблемой в datepicker. Не был уверен, в чем проблема, но не смог найти исправления для того же, что и до сих пор. Будет держать вас в обновленном состоянии, я делаю некоторый прогресс. –

+0

Я вижу ту же проблему, ничего не замечаю где-нибудь об исправлении – John

+0

Возможно, это связано с той же ошибкой iOS, что и http://stackoverflow.com/q/39557023/37168 – stone

ответ

4

Я смог воспроизвести эту проблему. Проблема заключается в том, что всякий раз, когда вы пытаетесь удалить окно выбора в своем событии изменения, iOS10 не может правильно отменить привязку selectbox. Чтобы исправить это, вам нужно поместить код кода изменения кода в setTimeout с некоторым значением таймаута. Он не работает с нулевым значением тайм-аута.

http://jsfiddle.net/n62e07ef/

Ниже приводится исправление кода:

<script> 
$("#test").change(function() { 
    setTimeout(function() { 
    $("#test").remove(); 
    var combo = $("<select></select>").attr("id", "test2").attr("name", "test"); 
    combo.append("<option>New One</option>"); 
    $("#App").append(combo); 
    }, 50); 
}); 

$("#click").click(function(){ 
    $("#App").remove(); 
}) 
</script> 
+0

это странно нет? – atorgfr

+0

Это очень странно, но решение сработало для меня. – John

+0

Странно, но эта ошибка может быть вызвана изменениями типа ввода, которые Apple сделала в iOS10. Хотя после выпуска iOS10 было выпущено 2 небольших релиза, но пока они еще не исправили эту проблему. Похоже, эта проблема заключается в том, чтобы оставаться на более длительный период времени. –

0

Одно простое решение было бы изменить код немного, чтобы не повторно генерировать весь Select-элемент, но только опции-элементы внутри.

0

Я наткнулся на эту ошибку сегодня. Это похоже на то, что Гаутам говорит в своем ответе, что это событие не будет отвязано перед удаленным элементом. Мое решение, blur the element before removing it.

$("#test").blur().remove();