2012-08-31 32 views
1

構建一個web應用程序,並無法獲得點擊事件觸發。它從Safari的普通實例運行時運行良好,但從主屏幕運行時會失敗。jQuery點擊事件沒有觸發 - ios主屏幕的網絡應用程序

$("a.applink").live('click', clickHandler); 
var clickHandler = function(e) { 
    console.log(e); 
    e.preventDefault(); 
} 

從主屏幕運行時,'e'爲空。如果我替換'touchend'的'click',它可以工作,但是touchend不會給出正確的行爲(即,如果碰巧觸摸了一個鏈接開始滾動,它會觸發意外的點擊)。

有沒有適當的解決方案呢?

回答

2

我是這樣做的:

從本質上講,當你瀏覽你要去挖掘或滾動頁面。 (當然還有其他的東西像捏和幻燈片放後,你可以計算出來)...

所以上的點按您的「touchstart」之後,將一個「touchend」 上採取滾動你的「touchstart」會跟着一個 'touchmove'

使用JQ 1.7 ...其它版本可以使用.bind()

function nextEvent() { 
    //behaviour for end 
    $(this).on('touchend', function(e){ 
     /* DO STUFF */ 
     $(this).off('touchend'); 
     }); 
    //behaviour for move 
    $(this).on('touchmove', function(e){ 
     $(this).off('touchend'); 
     });  
    } 

$(element).on('touchstart', this, nextEvent); 

基本上,當一個 'touchstart' 發生什麼,我綁定行動 'touchend'和'touchmove'。

「Touchend」做任何我想要自來水做​​的,然後解除綁定本身 「Touchmove」基本上什麼都不做,除了解除綁定「touchend」

這樣,如果你點擊你的行動,如果您滾動沒有任何反應但滾動..

+0

謝謝。我會嘗試這種方法。 您是否知道爲什麼從ios的主屏幕運行應用程序時,「點擊」事件不起作用? – james

0

首先定義clickHandler功能,一旦它的聲明,然後使用$("a.applink").live('click', clickHandler);現在你有約束力clickHandler事件一個事件是前申報,

注:在這種模式令事情。

var clickHandler = function(e) { 
    console.log(e); 
    e.preventDefault(); 
} 

jQuery(function(){ 
    $("a.applink").live('click', clickHandler); 
}) 

OR

Chnage這樣

jQuery(function(){ 
    $("a.applink").live('click', clickHandler); 
}); 

function clickHandler (e) { 
    console.log(e); 
    e.preventDefault(); 

} 
+0

謝謝。然而,最初我錯誤地發佈了,但我已經按照正確的順序執行了這些操作。 (在調用之前定義函數)所以我不認爲這是問題。它從正常的Safari實例運行時正常工作,但從主屏幕啓動時卻失敗。 – james

0

我知道這個答案你的代碼是一點點晚,但櫃面任何人碰到這個問題,否則跌倒:

添加cursor: pointer;的元素風格如果你正在通過JS製作一個「可點擊」的元素。這將告訴iOS觸發點擊事件。

一般來說,使用觸摸事件可能會干擾滾動。