2014-06-06 45 views
3

這是我正在開發的一個動態JavaScript應用程序。我有許多具有類的錨定元素。點擊該類時,應該發生一些事情。這適用於Firefox,Chrome,IE,但在某些情況下在移動Safari(iPad和iPhone)上未觸發點擊事件。Mobile Safari有時不會觸發點擊事件

這些元素都具有完全相同的CSS,只是它們的位置不同(它們位於不同的容器中)。

我嘗試了各種解決方案,我在這裏找到但沒有運氣。例如:

你有什麼其他的想法,可能會幫助我找到一個解決的辦法?爲什麼click事件僅在某些情況下觸發?

謝謝!

+0

您應該有一個href屬性以確保錨點正常工作。在js中使用.preventDefault()來抵消它的行爲。 – Kyle

+0

謝謝凱爾。增加了hrefs,但沒有運氣。其他工作的元素也沒有hrefs。我應該如何使用.preventDefault()? – watt

+0

應用程序使用jQuery,所以在其click函數中有.preventDefault()。 – watt

回答

3

你試過嗎?這是因爲iOS不火,有時點擊事件,只能識別觸摸事件

$(document).on('touchstart click', [Selector], [ Event ] 
+1

冒泡。謝謝。似乎添加touchstart事件的作品。但是,即使用戶只是試圖滾動並開始讓他的手指觸摸該鏈接,它也可能不是最佳解決方案。有沒有比使用'touchstart'更好的方法? – watt

0

移動設備還有一個附加事件。嘗試添加「標籤」,不僅是點擊。你可以結合他們:

$(document).on('click tap', [selector], [handler]) 
+0

謝謝,我想你的意思是「水龍頭」。我嘗試了大部分事件,但沒有結果。 – watt

+0

傻我,是的,我的意思是水龍頭。 – xanobius

+0

也許它會幫助發佈結構,所以可以看到DOM。也許這個事件在其他地方被捕獲,而不是通過 – xanobius

4

從iOS上敲擊產生的單擊事件將泡沫剛剛一定的條件下,預期 - 其中一個你所提到的,光標樣式。這裏是另一個:

目標元素,或任何其祖先直到但不包括 的<body>的,有一個明確的事件處理程序的任何鼠標 事件的設置。這個事件處理程序可能是一個空的函數。

http://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html

這是更好的固定載體,並且可以在沒有瀏覽器檢查來完成。你必須添加一個額外的div由於「不包括<body>」部分:

<body> 
    <div onclick="void(0);"> 
    <!-- ... all your normal body content ... --> 
    </div> 
</body> 

現在每點擊事件DIV意志氣泡內始發如預期中的iOS(這意味着你可以趕上他們$(document).on('click', '.class', etc...))。

+0

這應該是被接受的答案。 – jeffdill2

相關問題