2014-10-19 79 views
3

我正在使用移動設備和平板電腦設備訪問導航的子菜單。我知道,使用onClick =「返回true」將做到這一點,但是,當用戶單擊列表項時,我還需要我的列表項關閉。基本上我需要它來切換子菜單。如果我添加這個簡單的Javascript代碼,它將起作用,但子菜單將始終保持打開狀態。我怎樣才能讓它關閉/切換子菜單?關於移動設備的Javascript onClick

HTML: 
     <nav> 
      <ul> 
       <li class="active"><a href="#">Menu 1</a></li> 
       <li><a href="#">Menu 2</a></li> 
       <li><a href="#">Menu 3</a></li> 
       <li class="bg"><a class="dropdown" href="#">Menu 4</a> 
        <ul> 
         <li><a href="#">Sub 1</a></li> 
         <li><a href="#">Sub 2</a></li> 
        </ul> 
       </li> 
      </ul> 
     </nav> 

Javascript: 
$('nav li.bg').on('click', function(){ 
    return true; 
} 
+1

'click'事件僅發射在移動設備上的'a'元素 – hindmost 2014-10-19 17:17:23

+0

@最後的信息來源? – ProllyGeek 2014-10-19 17:17:57

+0

@ProllyGeek來自[jquery docs](http://api.jquery.com/click/)的引用:_ **鼠標**指針位於元素上方時,click事件發送到元素,並且**鼠標**按鈕被按下並釋放._ – hindmost 2014-10-19 17:30:35

回答

3

您可以使用touchstart事件,觸發在移動瀏覽器。

$('nav li.bg').on('click touchstart', function(){ 
    return true; 
}); 

More touch based events

+0

這似乎並沒有像我希望的那樣切換李。 – 2014-10-19 18:19:07

+0

@ShakeelVictor當然不會切換li。因爲你沒有在你的點擊功能中做任何事情(返回true什麼都不做)。 也許看看[jQuery切換功能](http://api.jquery.com/toggle/) – lukasgeiter 2014-10-19 18:36:55

0

我的一些研究和幫助後,想通了這個問題。下面是我的代碼進行了更新我的CSS的一些更新,以及之後正確地觸發該移動設備上:

 function is_touch_device() { 

    return (('ontouchstart' in window) || (navigator.MaxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)); 
    } 

    if(is_touch_device()) { 

    $('.bg').on('click', function(){ 

     $(this).toggleClass('activate'); 

     $(this).find('ul').slideToggle(); 
     return false; 
    }); 
    } 
2

的p單擊虛擬方法:

$('p').on("touchstart",p_touch_start); 
$('p').on("touchmove",p_touch_move); 
$('p').on("touchend",p_touch_end); 

function p_touch_start(){ 
    p_touch_move.cancel_click = false; 
} 
function p_touch_end(){ 
    if(p_touch_move.cancel_click) return; 
    p_touch_move.cancel_click = true;//avoid somehow repeat call 
    //trigger onclick() 

} 
function p_touch_move(){ 
    //user is drag page, not click 
    p_touch_move.cancel_click = true; 
}