2012-07-12 56 views
-2

我有这样的代码行,当用户点击链接时,页面应该向下滚动到相应的锚点。scrollTo只适用于第一个链接

原来,它只适用于第一个链接。其他人刚刚火这个异常

Uncaught TypeError: Cannot read property 'slice' of undefined 

下面的代码

jQuery的

$(document).on('click','#scrollTo',function(){ 

       var to = $(this).attr('class'); 
       //alert(to); 
       //This allways print the correct class name 

       $(window).scrollTo('div #'+to,'1000'); 


      }); 

PHP

<ul id="source"> 
      <?php 
      $sourceRCS = $source->getAllSources(); 
      foreach($sourceRCS as $src) 
      { 
       echo '<li data-value="'.$src->name.'"><a href="#" id="scrollTo" class="'.$src->name.'">'.$src->name.'</a></li></a>'; 
      } 

      ?> 
    </ul> 
foreach($sourceRCS as $src) 
{ 


     echo ' 
    <div class="custom-label-src"> 
     <div id="'.$src->name.'" class="span12 label-title-src"> 
      '.$src->name.' 
     </div> 
    </div>'; 

} 

我在做什么错?

预先感谢您

回答

1

的ID都应该是独一无二的,但你重复#scrollTo。请尝试使用CSS类作为您的目标。

+0

仍然是相同的行为。将代码更改为这个$(document).on('click','。scrollTo',function(){var 0 1 = 0 $(window).scrollTo('div#'+ to,'1000'); });'移除链接的类属性,但只有第一个链接滚动。 – 2012-07-12 14:13:23

0
var to = $(this).attr('class'); 
$(window).scrollTo('div #'+to,'1000'); 

您正在选择一个班级并将其分配给“到”。然后,您将该课程转换为下一行中的ID。

你的选择应该是这样的:

var to = $(this).attr('class'); 
$(window).scrollTo('div .' + to,'1000'); 
+0

我没有转换任何东西。我只是在使用该课程的内容 – 2012-07-12 14:12:32

0

HTML的id的必须是唯一的。像先前建议的那样,尝试使用类来代替。另外,尝试捕获事件目标并滚动到它:

$(document).click(function(evt){ 
    var target = evt.target; 
    $(window).scrollTo(target, 1000); 
}); 

但是,这将滚动到用户点击的所有内容。一个更好的解决方案是仅在要滚动的锚标记上设置单击事件处理程序:

$("#source a").click(function(evt){ 
    evt.preventDefault(); 
    var target = $(evt.currentTarget); 
    $(window).scrollTo(target, 1000); 
    // More code here... 
}); 
相关问题