[ 面試沒回答上的問題2]IOS上給body綁定click事件的bug

來源:互聯網
上載者:User

標籤:bsp   核心   委託   指定   on()   標籤   dom   touch   function   

  面試被問到ios上的bug,自己提到綁定click事件的bug,但是並沒有把問題講的很清楚,這裡再清理一下思路。

  這個bug只在IOS上有,包括ihone,ipad,由於ios瀏覽器都用的safari核心,所以ios瀏覽器全部中槍。

  bug描述

  在進行事件委託時,如果將未存在於DOM的元素事件直接委託到body上的話,會導致事件委託失效,調試結果為事件響應到body子項目為止,既沒有冒泡到body上,也沒有被body所捕獲。但如果事件是DOM元素本身具有的,則不會觸發bug。換而言之,只有元素的非標準事件(比如click事件之於div)才會觸發此bug。

   

  1. 如何避免bug觸發:不要委託到body結點上,委託到任意指定父元素都可以,或者使用原生具有該事件的元素,如使用click事件觸發就用a標籤包一層。

  2. 使用touch事件代替click,如果是彈出層會有點透的問題存在。
  3. 已觸發如何修補:safari對事件的解析非常特殊,如果一個事件曾經被響應過,則會一直冒泡(捕獲)到根結點,所以對於已大規模觸發的情況,只需要在body元素的所有子項目綁定一個空事件就好了,如:

    ("body > *").on("click", function(){};);

    可能會對效能有一定影響,但是使用方便,大家權衡考慮吧~~~

  

[ 面試沒回答上的問題2]IOS上給body綁定click事件的bug

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.