JQuery Delegate IOS上失效解決方案

一徊哑、前言

最近同事在開發(fā)一個(gè)前端頁(yè)面的時(shí)候在IOS端真機(jī)測(cè)試下出現(xiàn)一個(gè)比較詭異的問題,如果沒有遇到過估計(jì)也是一籌莫展聪富。今天特此記錄一下莺丑,提醒部分可能遇到的朋友少繞一些彎路。這是關(guān)于JQuery 中的 delegate 和 on 綁定動(dòng)態(tài)元素事件觸發(fā)不了的問題墩蔓。文章以下只用 delegate 舉例梢莽。

二、JQuery 的 delegate 作用奸披。

首先我們來了解一下 Delegate 的作用昏名。一句話帶過:“給動(dòng)態(tài)添加的元素綁定事件”

看圖:

測(cè)試界面

下面九個(gè)測(cè)試按鈕是通過點(diǎn)擊上面的 “添加測(cè)試按鈕” 按鈕添加的。這就是動(dòng)態(tài)添加元素的概念阵面。接下來需求為每個(gè)添加的測(cè)試按鈕都有統(tǒng)一的處理事件轻局。這邊作為測(cè)試,當(dāng)點(diǎn)擊時(shí)輸出 “你點(diǎn)擊了+按鈕名稱” 信息样刷。
按平時(shí)綁定事件的方式仑扑,.click() 等方式。代碼如下

$(function(){
    //“添加測(cè)試按鈕” 按鈕點(diǎn)擊事件置鼻,測(cè)試按鈕 class 為 new-btn
    $("#add-btn").click(function(){
        var test_btn_count = $('#btn-line button').size();
        var new_btn_html = '<div class="new-btn btn">測(cè)試按鈕'
                            + (test_btn_count + 1) 
                            +'</div>';
        $('#btn-line').append(new_btn_html);
    });
    
    //用普通的click 綁定事件镇饮。很遺憾,沒任何反應(yīng)
    $('.new-btn').click(function(){
        console.log('你點(diǎn)擊了按鈕:'+$(this).text());
    })
})  

效果如圖:

測(cè)試代碼

接下來我們將普通的綁定事件換成 delegate ,代碼如下:

//btn-line 為存放 new-btn 的容器
$('.btn-line').delegate('.new-btn','click',function(){
    console.log('你點(diǎn)擊了按鈕:'+$(this).text());
})

delegate 效果

效果正常

至此箕母,Delegate 解決了動(dòng)態(tài)元素的事件綁定問題储藐。

三、JQuery Delegate 在 IOS 系統(tǒng)中失效問題

上面好像已經(jīng)實(shí)現(xiàn)了我們要的需求司蔬,但事實(shí)證明真正的坑還在后面∫厍眩現(xiàn)在 Chrome 下面的 IOS模擬器下面全部正常。但是當(dāng)項(xiàng)目正在跑在真機(jī)上俊啼,點(diǎn)擊測(cè)試按鈕又失去了反應(yīng)。為了在手機(jī)上看到效果左医,我們先把 console.log 換成 alert

$('.btn-line').delegate('.new-btn','click',function(){
    alert('你點(diǎn)擊了按鈕:'+$(this).text());
})

結(jié)果是界面直接懵圈了授帕。

IOS真機(jī)沒反應(yīng)

點(diǎn)擊沒有任何的 alert 信息

針對(duì)這個(gè)問題開始了搜索之旅,功夫不負(fù)有心人(其實(shí)不難搜到)浮梢。一切詭異的問題后面都會(huì)有一個(gè)神奇的解決方案跛十。

給動(dòng)態(tài)添加的 new-btn 添加 css cursor屬性

.new-btn{
    cursor: none;
}

神奇地好了

IOS真機(jī)正常反應(yīng)

網(wǎng)友對(duì)此的回答如下:

網(wǎng)友解答

答案地址

其實(shí)蘋果對(duì)于性能的要求是近乎苛刻的,這樣的特性應(yīng)該是蘋果為了節(jié)省性能開銷而產(chǎn)生的一個(gè)bug秕硝。如果沒有可點(diǎn)的特性的元素系統(tǒng)默認(rèn)不會(huì)給它響應(yīng)事件芥映。而我們添加的這個(gè) cursor 屬性就是讓元素看起來是可以點(diǎn)擊的,也就向操作系統(tǒng)指明這個(gè)元素是需要響應(yīng)事件的。

也就是說奈偏,想要一勞永逸坞嘀,給body 添加 cursor:pointer 樣式屬性【矗或者按照網(wǎng)友提供的方法丽涩,通過js判斷當(dāng)前是否為蘋果設(shè)備,如果是則加上裁蚁。

代碼如下:

if(/ip(hone|od)|ipad/i.test(navigator.userAgent)){
    $("body").css("cursor","pointer");
}

其實(shí)我到時(shí)覺得css代碼更干脆

body{
    cursor:pointer;
}
//或者
*{
    cursor:pointer;
}

直接給body或者是給 * 添加這個(gè)屬性都違背了蘋果節(jié)約性能開銷的初衷矢渊,最好的方式還是直接給需要響應(yīng)事件的元素添加 cursor 屬性.

.yourElementClass{
    cursor:pointer;
}

限于筆者技術(shù),文章觀點(diǎn)難免有不當(dāng)之處枉证,希望發(fā)現(xiàn)問題的朋友幫忙指正矮男,筆者將會(huì)及時(shí)更新。也請(qǐng)轉(zhuǎn)載的朋友注明文章出處并附上原文鏈接室谚,以便讀者能及時(shí)獲取到文章更新后的內(nèi)容昂灵,以免誤導(dǎo)讀者。筆者力求避免寫些晦澀難懂的文章(雖然也有人說這樣顯得高逼格舞萄,專業(yè))眨补,盡量使用簡(jiǎn)單的用詞和例子來幫助理解。如果表達(dá)上有好的建議的話也希望朋友們?cè)谠u(píng)論處指出倒脓。
本文為作者原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處! 東野文然

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撑螺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子崎弃,更是在濱河造成了極大的恐慌甘晤,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饲做,死亡現(xiàn)場(chǎng)離奇詭異线婚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)盆均,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門塞弊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泪姨,你說我怎么就攤上這事游沿。” “怎么了肮砾?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵诀黍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我仗处,道長(zhǎng)眯勾,這世上最難降的妖魔是什么枣宫? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮吃环,結(jié)果婚禮上也颤,老公的妹妹穿的比我還像新娘。我一直安慰自己模叙,他們只是感情好歇拆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著范咨,像睡著了一般故觅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渠啊,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天输吏,我揣著相機(jī)與錄音,去河邊找鬼替蛉。 笑死贯溅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的躲查。 我是一名探鬼主播它浅,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼镣煮!你這毒婦竟也來了姐霍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤典唇,失蹤者是張志新(化名)和其女友劉穎镊折,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體介衔,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恨胚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了炎咖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赃泡。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖塘装,靈堂內(nèi)的尸體忽然破棺而出急迂,到底是詐尸還是另有隱情,我是刑警寧澤蹦肴,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站猴娩,受9級(jí)特大地震影響阴幌,放射性物質(zhì)發(fā)生泄漏勺阐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一矛双、第九天 我趴在偏房一處隱蔽的房頂上張望渊抽。 院中可真熱鬧,春花似錦议忽、人聲如沸懒闷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愤估。三九已至,卻和暖如春速址,著一層夾襖步出監(jiān)牢的瞬間玩焰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工芍锚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昔园,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓并炮,卻偏偏與公主長(zhǎng)得像默刚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逃魄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理荤西,服務(wù)發(fā)現(xiàn),斷路器嗅钻,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評(píng)論 25 707
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案皂冰? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,754評(píng)論 1 92
  • 除了星期天,每天早晨养篓,我都會(huì)出現(xiàn)在萬江站臺(tái)附近秃流,這是我工作地點(diǎn),有點(diǎn)流動(dòng)柳弄,時(shí)間一長(zhǎng)舶胀,那些天天搭車去去來來的人,便熟...
    恰媽閱讀 708評(píng)論 4 4
  • 西沙海戰(zhàn)中被我軍擊沉的南越10號(hào)艦“怒濤艦”,居然和當(dāng)年為中國(guó)執(zhí)行收復(fù)西沙任務(wù)的“永興艦”是“姐妹”萍丐?這一歷史的“...
    海天游俠閱讀 828評(píng)論 0 2