2011-12-14 2 views
2

Я теряю рассудок, это должно быть просто, и я уверен, что я слишком усложнил его, как jQuery noob. Вздох.scrollTo() не прокручивается после вкладок ('select', #)

Таким образом, у меня есть эта страница, которая принимает # switchto = aC# goto = acemergency hashtags и включает соответствующие вкладки jQuery, после чего она должна перейти (прокрутить) желаемый идентификатор. Проблема в том, что вкладки() автоматически прокручиваются назад в верхнюю часть контейнера, а когда вызывается scrollTo(), он больше не знает, где прокручиваться. Другими словами, это не прокрутка.

Вот мой обработчик события:

jQuery(window).hashchange(function(e) { 
    if (window.location.hash) { 
     var hash = window.location.hash.substring(1); //Puts hash in variable, and removes the # character 
     var instruct = hash.split('#'); //split instructions 
     var whichtab = instruct[0].split('='); // split instruction from tab name 

     try { 
      var whichid = instruct[1].split('='); // split instruction from id name 
     } 
     catch (err) { /*suppress*/ 
     } 

     if (whichtab[0] == "switchto") { 
      switch (whichtab[1]) { 
       case 'ac': 
        try { 
         if (whichid[1] != "") { 
          $s.when(targettab(0)).then(targetid(whichid[1])); 
         } 
        } catch (err) {} 
        $s('.tour').tabs('select', 0); 
        break; 
       case 'heating': 
        try { 
         if (whichid[1] != "") { 
          $s.when(targettab(1)).then(targetid(whichid[1])); 
         } 
        } catch (err) {} 
        $s('.tour').tabs('select', 1); 
        break; 
       case 'plumbing': 
        try { 
         if (whichid[1] != "") { 
          $s.when(targettab(2)).then(targetid(whichid[1])); 
         } 
        } catch (err) {} 
        $s('.tour').tabs('select', 2); 
        break; 
      } 
     } 
    } 
}); 

А вот мои функции:

function targetid(givenid) { 
    //$s('html,body').animate({scrollTop: $s("#"+givenid).offset().top},'fast'); 
    $s.scrollTo($s("#" + givenid), 400); 
    $s("#" + givenid).delay(500).fadeTo('slow', 0.1, function() { 
     $s("#" + givenid).fadeTo('slow', 1); 
     console.log('got ' + givenid + ' and scrolled to it'); 
    }); 
} 

function targettab(giventab) { 
    $s('.tour').tabs('select', giventab); 
} 

Я попробовал несколько способов, я нашел здесь, на StackOverflow, но ни один из них не кажется, чтобы исправить мою проблему. Есть идеи? Есть ли способ остановить вкладки() от прокрутки вверху вверх по tabsselect?

ответ

0

Я действительно не так сильно смотрел на ваш код, но разве вы действительно не имеете в виду scrollTop, а не scrollTo? Предполагая, что $ S ваш объект JQuery, что происходит, когда вы пытаетесь:

$s("#" + givenid).scrollTop(400); 

Это также предполагает, что $ s («#» + givenid) правильный селектор для контейнера, который вы хотите прокрутки.

Я мог бы быть здесь (опять же, не выглядел так тяжело), ​​но я надеюсь, что это поможет!