MUI ios 与 安卓 软键盘调用事件

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"/>

posted @ 2017-07-06 10:32  RAINHAN  阅读(3721)  评论(0编辑  收藏  举报