2012-08-07 70 views
0

這個問題是關於觸摸事件在列表菜單中的子菜單。目的是通過一次觸摸(在移動設備上)執行操作 - >擴展,第二次觸摸回退。觸摸另一個項目 - >它延伸&以前的縮進。如何定位元素

問題出在這裏:iPad 4.3.3的效果很好。 iPhone 5.1 & Android 4 - 第二次觸摸縮回並延伸。不是預期的效果。從您的移動設備上查看example here。感謝您的期待。

這是jQuery或移動操作系統的錯誤?

$(document).ready(function() { 
    if((navigator.userAgent.match(/iPhone|iPod|iPad|Android/i))) { 
     $('#nav li').click(function(){ 
      // attach a click event listener to provoke iPhone/iPod/iPad's hover event 
      // Amended the next 3 lines 
      var $this_li = $(this); 
      $('#nav li ul').slideUp(function() { 
       $('ul', $this_li).slideDown(); 
      }); 
     }); 
    } else { 
     // This part works in non-mobile browser 
     $('#nav li').hover(
      function() { 
       //show its submenu 
       $('ul', this).slideDown(200); 
      }, 
      function() { 
       //hide its submenu 
       $('ul', this).slideUp(200);   
      } 
     ); 
    } 
}); 
+0

你需要另外一個if語句的arent與您的代碼不能正常工作的瀏覽器。 – 2012-08-08 03:37:27

+0

你對改進的jquery可能會有什麼建議嗎? – David 2012-08-08 14:00:52

回答

0

經過多次試驗和錯誤時間後,以下更改最終具有預期的效果,即在觸摸設備上鏡像懸停事件。也就是說,對於具有子菜單的菜單項(使用id和沒有class屬性):

  1. 如果子菜單啓動(隱藏),slideDown。
  2. 如果子菜單關閉(可見),請上移。
  3. 如果一個子菜單關閉並且另一個被選中,則向下滑動所選的隱藏向下滑塊&。

    $('#nav li').click(function() { 
        var $selected_li = $(this); 
        if ($('ul', $selected_li).is(':visible')) { 
         $('#nav li ul').slideUp(); 
        } 
        else { 
         $('#nav li ul').slideUp(function() { 
          $('ul', $selected_li).slideDown(); 
         }); 
        } 
    }); 
    
0
var $this_li = $(this); 
$('#nav li ul').slideUp(function() { 
    $('ul', $this_li).slideDown(); 
}); 

此代碼是做它應該,你是在告訴什麼$(this)來了slideDown, 但你也捕捉同一項目在上滑所以它的幻燈片上再向下。

試試這個,而不是循環瀏覽項目的集合 向上滑動它們,但點擊一個,然後只滑動點擊一個。

//...in the click event 
var $this_li = $(this); 
$('#nav li').each(function(index) { 
    if (this != $this_li) { 
     $('ul', this).slideUp(); 
    } 
    else { 
     $('ul', $this_li).slideDown(); 
    } 
}); 

我沒有jQuery的專家,但應該是非常接近。

+0

謝謝。 (你會認爲我是新手。)看起來它可以工作,但是現在子菜單(產品和推薦書)不會滑落。請參閱[示例](https://flydata.mobi/bella)。我已將警報添加到兩個分支。 – David 2012-08-10 11:21:56

+0

是的,我看到了 - 看起來像這不工作,應該是 如果($(this)!= $ this_li)像我說的不是一個jquery專家,可能會修復它jquery必須包裝這個指針林肯定。 – 2012-08-10 12:02:14

+0

再次感謝。這仍然有不正確的地方。同樣的結果。 'slideUp()'被調用了10次... – David 2012-08-10 17:02:20