2013-03-19 3 views
2

У меня есть JQuery Mobile Ajax навигации полностью отключена, например, так:JQuery Mobile якорные ссылки без Ajax не загружая

$(document).bind("mobileinit", function() { 
     $.mobile.ajaxEnabled = false; 
     $.mobile.linkBindingEnabled = false; 
     $.mobile.hashListeningEnabled = false; 
     $.mobile.pushStateEnabled = false; 
    }); 

Это прекрасно работает, КРОМЕ, Якорь/хэш-ссылки не работают, как они обычно делают за пределами JQM , Например, эта ссылка на мой тестовый сайт:

http://test.creativelogic.biz/operators#alert-kayak

Он должен идти прямо к <h6> с идентификатором «# встревоженной-байдарке». Однако, когда страница загружается, вы находитесь в верхней части страницы (если она загружается достаточно медленно, вы увидите нагрузку в точке привязки, а затем прыгаете вверх). В любом случае вы оказываетесь в верхней части страницы, а не на якорной ссылке, как вам следует. Есть ли хорошие способы решения этой проблемы? Благодаря!

+1

Похоже, вы используете несколько плагинов jQuery, включая что-то вроде «scrollTo». Вы убедились, что проблема связана с ошибкой jQuery Mobile, удалив другие скрипты? – Jasper

+0

У вас есть «что-то», что заставляет страницу идти вверху после ее полной загрузки. – Omar

+0

@ Jasper - Да, определенно пробовал удалить все остальные скрипты, тот же результат. Сеть полна различных людей с той же проблемой, в том числе -> http://stackoverflow.com/questions/14863114/jquery-mobile-page-wont-load-to-anchor-tag-on-link-from-separate – Trevor

ответ

1

Это исправление - это лишь слегка модифицированный код из этого ответа (https://stackoverflow.com/a/14286613/1462775), чтобы он работал на все привязные ссылки, а не только на определенные. Я положил этот скрипт в конце моего <head> элемента.

$(document).bind('pageshow',function(e) { 
    var $anchor; 
    $anchor = $(location.hash); 
    if ($anchor) { 
     // Get y pos of anchor element. 
     var pos = $anchor.offset().top; 

     // Don't use silentScroll() as it interferes with the automatic 
     // silentScroll(0) call done by JQM on page load. Instead, register 
     // a one-shot 'silentscroll' handler that performs a plain 
     // window.scrollTo() afterward. 
     $(document).bind('silentscroll',function(e,data) { 
      $(this).unbind(e); 
      window.scrollTo(0, pos); 
     }); 
    } 
}); 
+0

Надеюсь, это отлично работает для вас :) – Omar