最近要在一個移動端頁面上新增一個下拉列表,點擊下拉,而後點擊頁面任何位置列表收回,這個功能很簡單,在PC端也實現過不少次,基本思路就是在document/body上綁定click事件,觸發時隱藏下拉列表。編程
開發時一切正常,在Chrome的模擬手機瀏覽器上測試也一切正常,可是在iOS下的Safari上測試,列表能夠展開,在頁面任意位置點擊收回的功能卻失效了。瀏覽器
Chrome模擬手機瀏覽器上一切正常,真機卻有問題,在網上搜索的調試方法基本上都須要Mac(流下了貧窮的眼淚),只能一點一點修改js來調試了。測試
首先的思路就是排除其餘變量,我在一個測試頁面上實現了相同的下拉表單,並在document/body上綁定了click事件,而後發現一切正常。 優化
document
或body
的父級元素上。cursor: pointer
。cursor: pointer
這個樣式規則後,被認爲是可點擊元素,也就能夠觸發click事件了。cursor: pointer
才能夠觸發click事件,其餘元素都可以正常觸發click事件。$(document).on('click touchstart', function() {// do something...})
。其實問題到這裏就解決了(若是就這麼解決我也不會寫這篇文章了-_-||),可是總有個問題在我心頭揮之不去,爲何以前個人測試功能頁面只在document綁定click就一切正常,正式頁面卻不行呢,兩個頁面明明沒什麼區別,這個問題不解決怎麼能算是學到東西了呢。 調試
因此推論以下,iOS下的瀏覽器,觸發document/body的click事件時,若是頁面超過一屏,會認爲這是網頁雙擊向下翻頁的第一次點擊,這屬於瀏覽器的默認行爲,咱們本身定義的click事件就失效了。可是若是頁面都沒有超過一屏,這個翻頁的默認行爲不存在,咱們本身定義的click事件就能夠執行了,大功告成~ code