因為給幾個線上的頁面做了js動態代碼,圖省事就用了jQuery框架,也是怪當時自己沒有詳細的測試過,結果頁面給別人了之后才發現jQuery的這個bug,不過也好,至少有所收獲,如果不出現這個問題,估計我也想不到要去看jQuery官方的bug列表了。這是后話了!
jQuery的live綁定為什么會在mobile safari上失效呢?其實可以追溯到jQuery里live的實現方式。live的實現方式實際上是通過事件委托機制來實現的,也就是說是通過諸如冒泡的方式在DOM樹的相應根節點上綁定事件,這樣此結點下的所有節點都會默認綁定了此事件。mobile safari上之所以live會失效就是因為mobile safari可能阻止了事件的冒泡(這里也只是推測,實質的原因還在進一步查找),沒有給根節點綁定相應的事件,從而導致了問題的產生。
jQuery在mobile safari上使用live進行事件綁定會失效的解決方案有如下兩個:
(1)將live綁定更改成bind綁定
但是這個前提是不需要給動態新生成的元素(如ajax請求后新建的元素)進行事件綁定,
否則建議采用第二種解決方案。
(2)在需要進行事件綁定的元素上(包括新建元素)添加onclick=""
這個方案比較完美,可以完全保留live的事件委托的實現方式,只是比較麻煩的是需要多
寫很多的onclick=""。
這樣的話也有弊端,最后發現一個問題可以解決,在live綁定的時候,給元素添加樣式cursor:pointer;就生效了