2015-06-04 4 views
2

Я установил несколько триггеров событий, чтобы закрыть определенные элементы, когда пользователь нажимает на них. Это отлично подходит для немобильных устройств, но на мобильном телефоне или планшете они не срабатывают. Я предполагаю, что это происходит потому, что события нажатия срабатывают иначе, чем щелчки. Любые предложения о том, как подойти к этому, чтобы функция охватывала оба аспекта?Событие триггеров внешних элементов не срабатывает при нажатии

// Listen for unique event targets 
     $(document).on('click', function(event) { 
     if (!$(event.target).closest('.modal .content').length) { 
      $('.modal').fadeOut(200); 
     } 
     if (!$(event.target).closest('.language-selector ul').length) { 
      if ($('.language-selector').is(':visible')) { 
      $('.language-selector >').removeClass('active'); 
      } 
     } 
     if (!$(event.target).closest('.searchbox').length) { 
      if ($('.searchfield').is(':visible')) { 
      $('.searchfield').removeClass('active').parents('.searchbox').find('input[type="submit"]').removeClass('active'); 
      } 
     } 
     }); 
+0

Не могли бы вы создать скрипку? –

+0

Ответ здесь: http://stackoverflow.com/questions/10722730/jquery-click-event-not-working-in-mobile-browsers – lmgonzalves

ответ

2

Да, нажмите и коснитесь различных событий.

Вы можете связать как с помощью JQuery Selecter синтаксис (click tap):

// Listen for unique event targets 
     $(document).on('click tap', function(event) { 
     if (!$(event.target).closest('.modal .content').length) { 
      $('.modal').fadeOut(200); 
     } 
+0

Спасибо, но я не могу заставить это запускать, кроме целевых ссылок. Это потому, что я не использую jQuery mobile? Мне нужно, чтобы он срабатывал по любому элементу. –

+0

@StaffanEstberg, да, и нет. Мобильный с JavaScript всегда является пробной ошибкой. JQuery Mobile пытается объединить события, это может быть лучше. Или ваша проблема может быть разницей в 300 мсек между нажатием и щелчком. С учетом вашего эффекта угасания и дифференциала 200 мс это может быть. В этом случае Fastclick может помочь. Продолжайте пробовать разные решения, пока не сработает. Быстрый клик можно найти на странице https://github.com/ftlabs/fastclick –

1

Попробуйте привязки "нажмите кнопку", чтобы "touchstart":

$(document).on('click touchstart', function(event) { 
     if (!$(event.target).closest('.modal .content').length) { 
     $('.modal').fadeOut(200); 
} 

Для elebaorate ... Если вы Арен используя jQuery Mobile (или какой-либо другой плагин/расширение, определяющее «tap»), тогда у вас нет доступа к событию «tap».

Существует ряд решений, которые будут захватывать событие крана, которое не является мобильным устройством jquery, и не являются столь же массивными, если все, что вам нужно, - это доступ к «tap».

Подробнее о «touchstart» и других родных JS потрогать события here