1. 程式人生 > >MUI框架a連結href跳轉失效、使用jquery之後click方法失效問題

MUI框架a連結href跳轉失效、使用jquery之後click方法失效問題

一、使用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跳轉