===========ios 与 安卓 软键盘调用事件==============
javascript
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;
});
})
ios 与 安卓 软键盘调用事件:
用于app商城首页点击搜索框,右滑出webview 搜索页面。
注意的bug: ajax 调用 、 createview 的创建 或者 销毁、plus.nativeUI 的 showWaiting() closeWaiting() 等等,会引起当前页面的聚焦问题,所以会导致blur()的触发,而blur()会自动调用native 的 软键盘关闭。
综上所述,由于各种原因导致失去焦点,引起软键盘闪退。
focus() 聚焦引起的软键盘闪退问题: 做适当的延迟就行了
setTimeout(function() {
mobile.focus();
}, 300)
软键盘的数字选项:(默认英文选项)
<input id="search" type="tel"/>
===========双击回退按钮后关闭app的方法================
//首页返回键处理
//处理逻辑:1秒内,连续两次按返回键,则退出应用;
var first = null;
mui.back = function() {
//首次按键,提示‘再按一次退出应用’
if (!first) {
first = new Date().getTime();
mui.toast('再按一次退出应用');
setTimeout(function() {
first = null;
}, 1000);
} else {
if (new Date().getTime() - first < 1000) {
plus.runtime.quit();
}
}
};
真机调试(手机联调):(12/2)
明明方法正确,但是执行不了,遇到这个问题, 退出真机联调的app应用重新登录, 不需要重启服务器。
比如我预加载list页面,
mui.plusReady(function() {
var page = mui.preload({
url:'list.html', //注意路径的配置(根据当前路径来配置)
id:'list.html',
})
mui.fire(page,'listPage',{
myId: "35467"
});
});
在list 页面获取传过来的参数。
mui.plusReady(function () {
//添加infoEvn自定义事件监听
window.addEventListener('listPage',function(event){
//获得事件参数
var myId = event.detail.myId;
mui.alert("please waiting..."+ myId);
//plus.nativeUI.closeWaiting();
//根据id向服务器请求数据
});
})
获取了好几次都没有获取到,不知道为什么? 重启了好几次真机app,才运行出来。。(或许是真机app有缓存?)
12/3
Uncaught RangeError: Maximum call stack size exceeded:
chrome 报堆栈错误
如果控制台报这个错误,可以在chrome中可以查看。
可能存在的原因: 可能是 html5+ 的 plus.ready 与 mui.plusReady 冲突。
一个页面,要么是 plus.ready 要么就是 mui.plusReady
顶部选项卡-可左右拖动+scroll区域滚动:
<div id="slider" class="mui-slider mui-fullscreen">
只需要在slider中添加一个mui-fullscreen就好
12/6
Uncaught RangeError: Maximum call stack size exceeded
chrome 报堆栈错误
如果控制台报这个错误,可以在chrome中可以查看。
可能存在的原因: 可能是 html5+ 的 plus.ready 与 mui.plusReady 冲突。
一个页面,要么是 plus.ready 要么就是 mui.plusReady
顶部选项卡-可左右拖动+scroll区域滚动
<div id="slider" class="mui-slider mui-fullscreen">
只需要在slider中添加一个mui-fullscreen就好
上拉加载:动态添加数据
一定要作用在 mui-scroll 的元素上: 如下
(仔细审查demo上的代码,严格按照demo上固有的代码结构还有js作用的元素来重新组织自己的代码)
$('#offCanvasContentScroll .mui-scroll').pullToRefresh({
up: {
callback: function() {
var self = this;
setTimeout(function() {
mui.ajax("../json/china.json", {
type: "post",
dataType: "json",
timeout: 10000,//超时时间设置为10秒
success: function(data) {
var ul = self.element.querySelector('#pro-list');
ul.appendChild(createFragment());
self.endPullUpToRefresh();
lazyLoadApi.refresh(true);
bindProClick();
},
error: function(xhr,type,errorThrown) {
mui.alert("error: "+ type);
}
});
}, 70);
}
}
});
各类组件如果是用动态添加数据或者追加数据的方式,导致组件无法触发,一般情况下,重新调用组件方法进行激活即可。
5 个评论
要回复文章请先登录或注册
2***@qq.com
雕龙web
5***@qq.com
1***@qq.com (作者)
d***@sina.com