2013-09-20 3 views
0

Я разрабатываю веб-сайт, который загружает разные страницы в зависимости от того, какой значок меню пользователь нажимает. Друг и я написал этот яваскрипт функции:Как я могу достичь «прыжков» с помощью jquery?

function loadPage(targetURL){ 
    $.get(targetURL, function(data) { 
    document.getElementById("placeholder").innerHTML=data; 
    window.scrollTo(0,0); 
    }); 
} 

И иконки меню кодируется так:

<img src="images/some_icon.png" title="Some Page" onclick="javascript:loadPage('pages/somePage.php')"/> 

Он прекрасно работает, за исключение, если пытаться перейти к конкретному сНу ид. Например,

<img src="images/some_icon.png" title="Some Page" onclick="javascript:loadPage('pages/somePage#someLocationOnPage.php')"/> 

Вывод .scrollTo (0,0) не решает проблему. Я поместил эту строку, чтобы обеспечить прокрутку страницы при изменении страниц (в противном случае, если бы вы были посередине страницы и щелкнули значок меню, новая страница будет отображаться в середине страницы).

Что я пропустил? Как я могу получить ссылку, чтобы перейти к div id?

+0

Сначала убедитесь, что функция вызывается. Используйте console.log или alert() или такие. – andrewb

+0

Проверено. Функция действительно называется. –

+0

'$ (window) .scrollTop ($ ('#' + targetUrl.split ('#') [1] .split ('. Php') [0]). Position(). Top);' экстремально грубая. – Ohgodwhy

ответ

0

Два URL не отличаются друг от друга. У одной с закладкой только один и тот же код HTML. Поскольку вы не указываете браузеру перейти к определенной закладке, он должен отображать ту же информацию. (Если ваш сервер не отправляет разную информацию для этой ссылки, конечно)

Думаю, вам придется вручную переместить представление в нужную закладку.

function loadPage(targetURL, targetID){ 
    $.get(targetURL, function(data) { 
     document.getElementById("placeholder").innerHTML=data; 
     if(targetID && $("#"+targetID).length != 0){ 
      $(document).scrollTop($("#"+targetID).offset().top); 
     } 
     else { 
      window.scrollTo(0,0); 
     } 
    }); 
} 

И затем укажите идентификатор для цели в качестве другого параметра. Если это невозможно, вы также можете найти # в URL-адресе и найти идентификатор/якорь.

+0

Возможно, мне что-то не хватает, но это решение на самом деле ломает мой сайт еще больше. Я довольно новичок в javascript, поэтому я не могу найти вашу ошибку. И да, я вспомнил, что я изменил #someLocation на реальный id. :-) Если бы я мог получить что-то столь же быстрое, как это, чтобы работать, я бы это сделал. Но неужели плохая практика не имеет более общего решения? –

+0

Что вы подразумеваете под этим? где это не так? Я зафиксировал закрывающие скобки. Надеюсь, вы это видели. – xcorat

+0

Ах! Я не видел этого исправления. Да, другие ссылки работают сейчас, но прыгающий - нет. Я бы использовал эту функцию, как Право? –

0

Прежде всего, вы должны оставить в своем коде window.scrollTo(0,0), чтобы страница не переходила в начало страницы на каждый щелчок элемента меню.

Во-вторых, если при щелчке значка меню, который звонит

loadPage('pages/somePage#someLocationOnPage.php') 

ваши намерения открыть «somePage» и перейдите к позиции, где идентификатор элемента является «someLocationOnPage.php», то вы должны обновить свой метод loadPage для проверки детали после «#».

function loadPage(targetURL){ 
    $.get(targetURL, function(data) { 
     document.getElementById("placeholder").innerHTML=data; 
     window.scrollTo(0,0); 

     // Grab url part after '#' 
     var name = targetURL.substr(href.indexOf('#') + 1), target = $('a[name='+ name +']'), target2 = $('#' + name); 

     // Determine of bookmark is available or not 
     target = (target.length)? target : target2; 

     // Scroll to the bookmark 
     $('html,body').animate({ 
      scrollTop: target.offset().top 
     },400); 
    }); 
} 
+0

С помощью этого решения все ссылки работают так, как ожидалось ... _except_ тот, который перескакивает на #. :( –

+0

Значит, вы не прыгаете на эту упомянутую закладку? –

+0

Правильно. Это ведет себя так же, как мой исходный код. –