2012-06-15 3 views
1

Я работаю на одном сайте в настоящее время: http://dlt.tribehosting.com/solutionjQuery переход на конфликт перехода JQuery?

теперь, когда я нажимаю на коммерческой или жилой кнопки она работает нормально, но когда вы идете на странице сервиса в «тумблер» в JQuery просто не будет работать - на самом деле все сценарии jQuery просто перестают работать (то же самое для слайдера на главной странице).

Если на самом деле перегружена страница, чем все хорошо, пока пользователь не перейдет на другую ссылку, а не все разрывается. Это что-то связано с (document) .ready, поскольку я использую это (вы можете видеть в заголовках).

Любые идеи о том, как предотвратить это конфликты или заставить jQuery переключиться на работу на всех страницах при посещении через ссылки навигации?

Благодаря

+0

Вы пытались использовать 'jQuery' вместо' $ '? – gcochard

+0

не совсем уверен, что вы имеете в виду? – Peter

+0

'$' является псевдонимом для 'jQuery', если вы изменяете $ на jQuery в своем скрипте, он больше не должен конфликтовать, если это действительно причина. – gcochard

ответ

1

Ваш вопрос в том, что вы используете document.ready для запуска кода для страниц, которые доводятся-в DOM через AJAX. Это означает, что если вы хотите привязываться к событию для каждой страницы, добавляемой в DOM, вы должны использовать либо pageinit, либо pagecreate.

Изменение:

$(function(){ 
    var sidebar = $('.hor-nav'); 
    sidebar.delegate('a.inactive','click',function(){ 
     sidebar.find('.active').toggleClass('active inactive'); 
     $(this).toggleClass('active inactive'); 
    }); 
}); 

To:

//run this code when a pseudo-page is added to the DOM 
$(document).delegate('[data-role="page"]', 'pageinit', function(){ 

    //only get the .hor-nav elements in this pseudo-page 
    var $sidebar = $(this).find('.hor-nav'); 

    //no need to delegate here since the elements for this page exist in the DOM now 
    $sidebar.find('a').bind('click',function(){ 
     $sidebar.find('.active').toggleClass('active inactive'); 
     $(this).toggleClass('active inactive'); 
    }); 
}); 

Это будет использовать делегирование событий на элемент, который всегда будет существовать в DOM (document), в то время как .hor-nav элементы не всегда существуют в DOM, если они являются частью внешней страницы.

Похоже, что у вас есть другой код, который зависит от события document.ready, что не должно быть на сайте jQuery Mobile. Взгляните на эту документацию: http://jquerymobile.com/demos/1.1.0/docs/api/events.html (обратите внимание на большие желтые предупреждения)

+0

Действительно ... Я переместил весь код в зависимости от документа, так что теперь он работает! Большое спасибо за помощь! – Peter

+0

На самом деле теперь есть еще одна странная вещь. Если вы перейдете на страницу: http://lb.vg/Sq684 и нажмите на «Коммерческий», он применит класс active, но когда вы нажмете «Residential» - это переключение классов? Любые идеи? – Peter

+1

Селектор 'a.inactive' должен быть обновлен до' a', чтобы все ссылки привязаны к Я обновил свой ответ, чтобы отразить это. Выбор 'a.inactive' только привязан к cur неактивно, не все из них. Вы можете проверить этот факт, перейдя в любой раздел вашего сайта и нажав на неактивную ссылку, затем снова нажмите на первую ссылку, обратите внимание, что классы не меняются. – Jasper

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