2016-09-18 24 views
7

有了這個鏈接,您可以重現該錯誤。iOS 10 Safari問題與<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>元素和DOM刪除它之後,你點擊鏈接測試。您應該看到舊的<select>元素彈出供選擇。

是否有一些破解修復?

+1

感謝您分享問題的確切性質。在日期選擇器中我也遇到同樣的問題。不知道確切的問題是什麼,無法找到相同的修復方法。隨着我取得一些進展,將會讓你更新。 –

+0

我看到了同樣的問題,沒有任何關於修復的任何地方的注意事項 – John

+0

這可能是由與http://stackoverflow.com/q/39557023/37168 – stone

回答

4

我能夠重現此問題。問題在於,無論何時您試圖刪除其更改事件上的選擇框,iOS10都無法正確解除綁定選擇框。爲了解決這個問題,你需要把你的代碼更改事件代碼放在一個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

相同的iOS錯誤造成的,這很奇怪嗎? – atorgfr

+0

這很奇怪,但解決方案爲我工作。 – John

+0

奇怪,但是這個bug可能是由於Apple在iOS10中最近做出的輸入類型更改所致。儘管iOS10發佈後有兩個次要版本,但尚未解決此問題。看起來這個問題是要停留更長的時間。 –

0

一個簡單的解決辦法是改變一下代碼,所以不用重新生成整個選擇元素,但只是選項元素裏面。

0

我今天偶然發現了這個bug。這就像Gautam在回答中所說的那樣,事件在被刪除的元素之前不會解除綁定。 我的解決方案,blur the element before removing it

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