Триггерное событие не работает на сенсорных устройствах

У меня следующий код JS, он отлично работает на рабочем столе, но не работает на сенсорных устройствах.

jQuery(document).ready(function(){
  jQuery("#gallery_trigger").click(function () {
    jQuery(".my-second-portfolio").trigger( "click");
  });  

});

Из моего анализа я понял, что следующая строка кода не работает

jQuery(".my-second-portfolio").trigger( "click");

Я понимаю, что .trigger( "щелчок"); не подходит для сенсорных устройств, поэтому не могли бы вы помочь мне работать с этим кодом на всех устройствах?

3 ответа

Попробуйте "нажать" или "vclick"

http://api.jquerymobile.com/tap/

$(".my-second-portfolio").tap();

Первое, чему вы научитесь в jQuery, это вызвать код внутри функции $(document).ready(), чтобы все выполнялось, как только DOM загружен. Однако в jQuery Mobile Ajax используется для загрузки содержимого каждой страницы в DOM во время навигации. Из-за этого $(document).ready() сработает до загрузки вашей первой страницы, и каждый код, предназначенный для манипулирования страницей, будет выполнен после обновления страницы. Это может быть очень тонкая ошибка. В некоторых системах может показаться, что он работает нормально, но в других это может привести к ошибкам, которые трудно повторить.

Классический синтаксис jQuery:

$(document).ready(function() { 

});

Чтобы решить эту проблему (и поверьте мне, это проблема), разработчики jQuery Mobile создали страницы событий. В двух словах, события страницы - это события, запускаемые в определенной точке выполнения страницы. Одним из таких событий страницы является событие pageinit, и мы можем использовать его следующим образом:

$(document).on('pageinit', function() {

});

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

$('#index').on('pageinit', function() {

});

Есть также другое специальное событие jQuery Mobile, которое называется mobileinit. Когда jQuery Mobile запускается, оно вызывает событие mobileinit для объекта документа. Чтобы переопределить настройки по умолчанию, свяжите их с mobileinit. Одним из хороших примеров использования mobileinit является отключение загрузки страницы ajax или изменение поведения загрузчика ajax по умолчанию.

$(document).on("mobileinit", function(){
  //apply overrides here
});

Или вы можете использовать что-то вроде этого:

$('div:jqmData(url="index.html")').on('pageshow',function(){
    // code to execute on that page
    //$(this) works as expected - refers the page
});

Вы можете попробовать использовать $('.my-second-portfolio')[0].click(); для имитации щелчка мышью по фактическому элементу DOM (а не по объекту jQuery) вместо использования метода.trigger() jQuery.

Примечание: DOM Level 2 .click() не работает с некоторыми элементами в Safari. Вам нужно будет использовать обходной путь.

http://api.jquery.com/click/

Другие вопросы по тегам