iOS下js控制input/textarea元素隱藏軟鍵盤

借鑒網(wǎng)上其他大神的文章,這里存?zhèn)€檔
原文地址:http://www.cnblogs.com/dtdxrk/p/3682352.html

遇到的問題: 在iOS環(huán)境下input激活后,點擊頁面空白處無法失去焦點,且不能隱藏軟件盤

原因: 經(jīng)過測試,給document添加click事件,iOS不能觸發(fā),而Android可以。
根據(jù)原作者的思路,及提供的代碼,這里優(yōu)化一下。

這里只會查詢當前頁面已經(jīng)存在的元素,對于時下熱門的spa框架,并不太適用。有能力的可以自行補充一下或在評論區(qū)留言。

var ua = navigator.userAgent;
var ios = ua.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
// 僅針對iOS處理該問題
if (!ios) return;
// 統(tǒng)計input標簽會彈出軟件盤類型及textarea標簽
var _inputType = ["email", "number", "password", "search", "tel", "text", "url", "textarea"];
_inputType.forEach(function (item) {
    var _inputDom = document.querySelector( item === "textarea" ? item : ("input[type=" + item + "]") );
    // 當頁面不存在此元素則取消處理
    if (!_inputDom) return;
    // 對輸入框偵聽focus事件處理
    _inputDom.addEventListener("focus", function(event) {
        var eventHandler = function (e) {
            if (e.target == _inputDom) return;
            // 延遲200ms失去焦點及移除事件監(jiān)聽
            setTimeout(function() {
                document.activeElement.blur();
                document.removeEventListener("touchend", eventHandler, false);
            }, 200);
        };
        // 對domcument增加touchend事件處理
        document.addEventListener("touchend", eventHandler, false);
    });
});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,841評論 25 708
  • 我走在一塊格子襯衫的中央 我細數(shù)每一個方框 我將它們編號 和他們一起說笑 路人總是指著我心愛的襯衫說 它壞了 不 ...
    沐_子閱讀 187評論 0 0
  • 【普通人的一生,再好也是桃花扇,撞破了頭,血濺到扇子上,就這上面略加點染成一枝桃花】 張愛玲 【書是...
    后膩閱讀 278評論 0 0
  • 水瓶座不太了解!但是金牛座我非常了解,因為本人金牛座! 先說說金牛座吧!聽完自己判斷金牛座可靠不可靠再自己思考不遲...
    琳洛閱讀 629評論 1 1
  • 跟學校約了16號晚去參與創(chuàng)業(yè)分享講座,當下這個期間也只有我工大才能讓我舍得丟下小孩晚上出去活動了。這幾天沒事就腦...
    汶桐閱讀 540評論 2 2