3 回答

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
我認(rèn)為這是移動(dòng)Safari的一個(gè)功能,而不是一個(gè)bug。在我們關(guān)于FastClick的工作中,我和我的同事發(fā)現(xiàn),如果調(diào)用堆棧中的第一個(gè)函數(shù)是由非程序化事件觸發(fā)的,iOS將只允許在函數(shù)內(nèi)的其他元素上觸發(fā)焦點(diǎn)。在您的情況下,調(diào)用setTimeout
啟動(dòng)一個(gè)新的調(diào)用堆棧,安全機(jī)制啟動(dòng),以防止您將焦點(diǎn)設(shè)置在輸入上。
請(qǐng)記住,在iOS設(shè)置上,關(guān)注輸入元素會(huì)調(diào)出鍵盤 - 因此所有那些專注于頁(yè)面加載的輸入元素的網(wǎng)頁(yè),就像Google一樣,在iOS上使用會(huì)非常煩人。我猜Apple決定他們必須采取措施來(lái)防止這種情況發(fā)生。所以我不同意@DA:這是一個(gè)功能,而不是一個(gè)bug。
對(duì)此沒有已知的解決方法,所以你必須放棄使用延遲的想法。
從iOS 5開始,允許由合成點(diǎn)擊事件觸發(fā)的處理程序觸發(fā)對(duì)輸入元素的關(guān)注。嘗試更新的FastClick輸入焦點(diǎn)示例。

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
只有當(dāng)原始事件來(lái)自用戶交互而不是來(lái)自setTimeout時(shí),才能通過(guò)調(diào)度click事件來(lái)提升鍵盤。我相信結(jié)果是你可以從touchend事件中提升鍵盤,但仍然不會(huì)超時(shí)。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
至少在iOS 5.1上的Safari上,此問題已修復(fù)。您的FastClick
作品,即合成點(diǎn)擊事件不會(huì)失敗焦點(diǎn)。然而,這并不能幫助那些希望他們的單個(gè)focus()
代碼能夠在所有iOS版本上工作的人,感嘆。
添加回答
舉報(bào)