2014-09-16 3 views
5

Я пытаюсь активировать меню с помощью jQuery одним кликом (касанием) на мобильном устройстве, но он не работает на мобильных устройствах. Когда я изменяю размер окна, чтобы попробовать мобильный вид, он работает с кликом, но в эмуляторе или даже пытается его с помощью моего телефона, он не работает.jQuery onclick не работает на мобильном телефоне

HTML Markup

<img src="i/mobilemenu.jpg" id="mobileMenuButton" style="position:absolute; right:0;"/> 

CSS:

#mobileNavigation {display:none} 

Javascript Код:

<script type="text/javascript"> 
      $(document).ready(function(){ 
        $('#mobileMenuButton').on('click touchstart',function(){ 

          if ($('#mobileNavigation').css('display') == 'none') { 
           $('#mobileNavigation').css('display','block'); 
          } 
          else 
          { 
            $('#mobileNavigation').css('display','none'); } 
          }); 
        }); 
       </script> 
+0

Попробуйте удалить клик и оставить только touchstart, посмотрите, не влияет ли это на то, что это ваше решение. – artm

+0

Он работал с моим Android: http://jsfiddle.net/drn595w3/show/ – LcSalazar

+0

Просто СОВЕТ: Вы можете заменить все свои процессы и условия для показа/скрытия с помощью этого: '$ ('# mobileNavigation'). Toggle () '- Смотрите: http://jsfiddle.net/drn595w3/1/ – LcSalazar

ответ

0
<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('#mobileMenuButton').on('mousedown touchstart',function(){ 
      var userAgent = window.navigator.userAgent; 
      if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i)|| userAgent.match(/Android/i)) { 
     if ($('#mobileNavigation').css('display') == 'none') { 
      $('#mobileNavigation').css('display','block'); 
     } else { 
      $('#mobileNavigation').css('display','none'); 
     } 
     } 
     }); 
    }); 
</script> 

Просто предоставить агенту пользователя.

+0

Пробовал и ничего :( – vulcanR

+0

Зачем нужно это делать? Пожалуйста, объясните. –

+2

mousedown на мобильном устройстве? –

1

Я помню, когда я создавал мобильное приложение, элементы, которые не были ссылками, не могли набрать событие щелчка, если я не дал им свойство CSS cursor: pointer. Возможно, это аналогичная проблема. Попробуйте указать эту функцию в атрибуте style.

+0

попробовал, и получил ту же проблему :( – vulcanR

3

Создать обработчик щелчка на основе клиента, например:

var clickHandler = ("ontouchstart" in window ? "touchend" : "click") 

и использовать его всякий раз, когда вы хотите слушать нажмите события:

$(".selector").on(clickHandler, function() {...}) 

Таким образом, вы всегда можете убедиться, что надлежащее событие прослушивается.

+0

попробовал и не делает работа ... я знаю, странно, каждый другой разработчик, которого я просил о помощи, также удивлен, что он не работает – vulcanR

0

Пошел через этот вопрос и понял, что щелчок (и touchstart) должен работать.

@vulcanR, он не работает в вашем случае, потому что у вас уже есть #mobileNavigation как display: none; Таким образом, нет места для запуска события.

Вместо этого попробуйте следующий код и он должен работы-

$(document).ready(function() { 
    $('#mobileMenuButton').on('click touchstart', function() { 
     if ($('#mobileNavigation').css('opacity') == '0') { 
      $('#mobileNavigation').css('opacity','1'); 
     } else { 
      $('#mobileNavigation').css('opacity','0'); } 
     }); 
    }); 
}); 

Причина этой работы является то, что opacity:0 сохраняет высоту и ширину элемента, тогда как display:none делает размеры ноль, так что нет недвижимости для мероприятия. Возможно, вы также использовали visibility:hidden, но не прослушивали событие клика или какие-либо события в целом.

Смежные вопросы