Здесь нужна небольшая справочная информация, jQuery загружает страницы через AJAX и вставляет их в ту же страницу HTML, единственный код, который он извлекает со 2-й страницы, это что-то между div [data-role = "page"]это означает, что если у вас есть JS, он не будет втянут.
Вы изначально ссылались на элемент DOM по идентификатору и связывали его, на самом деле это не работает, поскольку jQM загружает несколько страниц вНа одной html-странице вы можете иметь несколько элементов с одинаковым идентификатором. Вам нужна ссылка на текущую страницу, которая называется $ .mobile.activePage и доступна после pageshow
.в ваших комментариях о том, что вы использовали живое событие, это шаг в правильном направлении, но если этот код выполняется более одного раза, он связывает несколько живых событий, поэтому вы получаете 3 слайда.
Решение состоит в том, чтобы использовать обработчик событий jQuery on для привязки живых прослушивателей событий к корневой странице div, а не к документу, и прослушивания # menu
jQuery("div:jqmData(role='page'):last").bind('pageinit', function(){
$(this).on('tap', '#menu', function(){
$(this).find('ul.sub-menu').slideToggle('slow');
});
});
Вам нужно будет запустить этот код в обработчике событий pageinit jQM, см. Ссылки ниже
Здесь есть похожий вопрос: https://stackoverflow.com/a/9200797/737023, У меня есть более подробное решение о хорошем способе связывания событий без конфликтов в jQM здесь: Jquerymobile - $ .mobile.changepage