var openSoftKeyboard = function() { if(mui.os.ios) { var webView = plus.webview.currentWebview().nativeInstanceObject(); webView.plusCallMethod({ "setKeyboardDisplayRequiresUserAction": false }); } else { var webview = plus.android.currentWebview(); plus.android.importClass(webview); webview.requestFocus(); var Context = plus.android.importClass("android.content.Context"); var InputMethodManager = plus.android.importClass("android.view.inputmethod.InputMethodManager"); var main = plus.android.runtimeMainActivity(); var imm = main.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED); } } 1. mui.plusReady(function() { //頁面隱藏事件 plus.webview.currentWebview().addEventListener("hide",function(e){ document.getElementById("search").value=""; document.getElementById("search").blur();//搜索框取消焦點,關閉軟鍵盤 }); //頁面顯示事件 plus.webview.currentWebview().addEventListener("show",function(e){ setTimeout(function() {//自動打開軟鍵盤,搜索框獲取焦點 openSoftKeyboard(); document.getElementById("search").focus(); }, 600); return false; }); })
注意的bug: ajax 調用 、 createview 的創建 或者 銷毀、plus.nativeUI 的 showWaiting() closeWaiting() 等等,會引起當前頁面的聚焦問題,所以會導致blur()的觸發,而blur()會自動調用native 的 軟鍵盤關閉。
綜上所述,由於各種原因導致失去焦點,引起軟鍵盤閃退。
focus() 聚焦引起的軟鍵盤閃退問題: 做適當的延遲就行了
setTimeout(function() {
mobile.focus();
}, 300)
軟鍵盤的數字選項:(默認英文選項)
<input id="search" type="tel"/>