Триггерное событие не работает на сенсорных устройствах
У меня следующий код JS, он отлично работает на рабочем столе, но не работает на сенсорных устройствах.
jQuery(document).ready(function(){
jQuery("#gallery_trigger").click(function () {
jQuery(".my-second-portfolio").trigger( "click");
});
});
Из моего анализа я понял, что следующая строка кода не работает
jQuery(".my-second-portfolio").trigger( "click");
Я понимаю, что .trigger( "щелчок"); не подходит для сенсорных устройств, поэтому не могли бы вы помочь мне работать с этим кодом на всех устройствах?
3 ответа
Первое, чему вы научитесь в 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. Вам нужно будет использовать обходной путь.