一、使用jquery之后click方法失效问题
怎么点都没效果,还以为我哪里写错了,纠缠了好久,然后发现点边边可以有效,只好搜索了半天关键词,原来:
- mui框架屏蔽了click方法
- 屏蔽了<a>链接href跳转
(吃多了吧……顺便吐槽一下mui的api,做的毫无重点,还没实例,自己屏蔽了东西也不说清楚)
来自网上的大神们的解决方法
★ 解决方法1:批量绑定/取消绑定
mui("#fuji").on('tap', '.dianji', function(event){
alert('111');//要运行的事件
});
.dianji是要绑定点击click的元素,#fuji是他的父级(奇怪的绑定)
//点击li时,执行foo_1函数
mui("#list").on("tap","li",foo_1);
//点击li时,执行foo_2函数
mui("#list").on("tap","li",foo_2);
function foo_1(){
console.log("foo_1 execute");
}
function foo_2(){
console.log("foo_2 execute");
}
//点击li时,不再执行foo_1函数,但会继续执行foo_2函数
mui("#list").off("tap","li",foo_1);
//点击li时,foo_2、foo_2两个函数均不再执行
mui("#list").off("tap","li");
★ 解决方法2:给tap绑定click,恢复click使用
mui("#fuji").on('tap', '.dianji', function (event) {
this.click();
});
$('.dianji').click(function(){
alert(1);
})
据说:在button上面绑定click事件是可以执行的(没验证)
★ 解决方法3:addEventListener绑定单个元素
on的用法,只能on MUI('xxxx') xxxx的子元素。
比如mui('body').on('tap','a',function(){})
这样就绑定了所有的A标签元素了。单独绑定一个的话,就直接用addEventListener就行了。
用法:
$('.btn1').addEventListener('tap', function () {
var _self = this;
})
♦ mui下拉刷新时,click事件无法响应,如果下拉列表项中有其他事件:(还没用到,先备注着)
mui("#refreshContainer").on('tap', '.icon-comment', function (event) {
this.click();
event.stopPropagation();//阻止li事件的点击
});
据说:如果页面除了mui.js外,还用了zepto.js ,那么很糟糕的是,这个tap事件会执行2次。有个解决的办法就是,去掉zepto的touch模块(可以使用node定制zepto)
二、<a>链接href跳转失效
又是mui的坑,好像有的部分可以有的部分不行。
♦ 原因:mui相关的一些控件是通过拦截a标签上的href来实现的,所以mui.js会阻止a标签上的href跳转,因此需使用JS对标签添加事件监听。
♦ 解决方法:
// 监听tap事件,解决 a标签 不能跳转页面问题
mui('body').on('tap','a',function(){document.location.href=this.href;});
其中a和body可替换为任意需要解决的<a>元素及其父级
据说:最新版的mui支持微信下使用,mui.openWindow方法在普通手机浏览器及微信环境下,会自动执行href跳转