2012-01-27 122 views
3

我正在使用Jquery Mobile,並且我的觸摸事件被觸發兩次。起初我認爲它可能是鼠標事件和觸摸事件之間的重疊,但我試圖在平板電腦/智能手機上解除鼠標事件,並且事件仍然被觸發兩次。不知道爲什麼觸發事件觸發兩次

這裏是我的代碼

//Tablet Features 
      var eventType = { 
       swipeleft: '-=100', 
       swiperight: '+=100' 
      } 
      $('#navMenu').bind('swipeleft swiperight', 
       function(e) { 
        $('#prbBtnHolder').animate({left:eventType[e.type]}); 
        //alert(e.type); 
       } 
      ); 

//Device Detection 
     (function() { 
      var agent = navigator.userAgent.toLowerCase(); 
      var isDevice = agent.match(/android/i); 

      if (isDevice == 'android') { 
       //alert(isDevice); 
       $('*').unbind('mousedown').unbind('mouseout').unbind('mousemove').unbind('mouseup'); 
      } 
     })(); 

我一直在試圖弄清楚這一點了一段時間,如果你有任何想法,請幫助。

UPDATE

我設法通過將觸摸處理程序.ready()方法外局部解決這個問題。但是,當我在服務器上運行頁面時,雙觸發器再次發生。現在我完全難倒了。爲什麼兩個相同的頁面(字面上相同)在本地和服務器上的行爲不同?

+0

如果在正則表達式中使用'i'標誌,則不需要使用'toLowerCase()',因爲'i'標誌意味着正則表達式將搜索不區分大小寫。 – Jasper 2012-01-27 01:11:18

+0

哪些觸摸事件被觸發兩次?你發佈的代碼中唯一觸摸事件是'swipeleft' /'swiperight'事件處理程序,你是指那些?我在這裏測試了代碼:http://jsfiddle.net/B8PQn/1/在我的手機(Android 2.3)上,滑動事件按預期工作。 – Jasper 2012-01-27 01:12:38

+1

@ Jasper - 這只是代碼的一個例子。頁面上的每個事件都被觸發兩次,我不知道爲什麼。也許有一些與jQuery的移動重疊? – dopatraman 2012-01-27 01:16:00

回答

-1

這聽起來像是您將腳本放入<body>標記中。如果你這樣做,他們會跑兩次。我也遇到了同樣的事情,並且因爲麻煩和挫折而變得有點孤僻。確保所有腳本都在<head>標籤內。

0

我有同樣的問題,並修正了一些小小的調整...我不推薦這個爲確切的解決方案,但我快速解決你的問題。

我定義一個全局標誌

var bDidPan=true; 

和觸發器內寫道:

if (bDidPan) { 
    bDidPan = false; // IT'S IMPORTANT TO PUT THIS FIRST 
    //code to execute when triggers 
} 
else 
{ 
    bDidPan = true; 
} 

而且奏效了。你可以用數字來訣竅(它對我來說效果更好)

希望它有幫助!