2013-06-20 57 views
0

對象的錯誤,我這裏有代碼的現場演示:LIVE DEMO偏移()頂部爲空或不在JQuery的

我所希望做的是在點擊1盒時,它應該滾動到第一部分,當點擊2框時,它應該滾動到第二部分等等。但是,當我點擊的數字,我收到以下錯誤:

offset().top is null or not an object

我JQuery的樣子:

$(function() { 
    $(".pointto").mouseover(function() { 
     $(this).addClass("Hover"); 
    }); 
    $(".pointto").mouseout(function() { 
     $(this).removeClass("Hover").removeClass("Pressed"); 
    }); 
    $(".pointto").mousedown(function() { 
     $(this).addClass("Pressed"); 
    }); 
    $(".pointto").mouseup(function() { 
     $(this).removeClass("Pressed"); 
    }); 
$(document).on('click', '.Hover, .Pressed, .pointto', function() { 
    var nn = $(this).attr('id').replace('s', ''); 
    alert('a[name="'+nn+'"]'); //clicking on 1 gives me <a name="01"> 
    t = $('a[name="'+nn+'"]').offset().top; //t = $('a[name="'+nn+'"]').offset().top; 
    $('body,html').animate({scrollTop:t},800); 
}); 
}); 

HTML樣本:

<a id="s01" class="pointto">1</a> //clickable link 
... 
... 
... 
<a name="01">1. About</a> //target 

任何想法如何解決那個錯誤?

更新:【解析】

$(document).on('click', '.Hover, .Pressed, .pointto', function() { 
    var nn = $(this).attr('id').replace('s', ''); 
    alert('a[name="'+nn+'"]'); 
    t = $('a[name="'+nn+'"]').offset().top; //t = $('a[name="'+nn+'"]').offset().top; 
    $('body,html').animate({scrollTop:t},800); 
}); 
+0

您是否嘗試過這個'T = $( 'A [NAME = 「 '+ NN +'」]')[0] .offset()首位;'? –

+1

在你的開發控制檯中,當你輸入$('a [name =''+ nn +'「'')時,你會得到什麼?我認爲選擇器找不到元素 – Simon

+0

聽起來像你的選擇器沒有匹配任何元素 – landons

回答

1

根據您發佈的HTML,這是你擁有的一切:

var nn = $(this).attr('id').replace('a', ''); 

由於ids01nn現在設置爲s01,因爲沒有「一」 S在id,什麼都不是更換

t = $('a[name="'+nn+'"]').offset().top; 

然後尋找一個as01一個name。你的主播沒有這個名字,你的主播被命名爲1。沒有任何東西的偏移量是空的,所以你然後嘗試使用null的top屬性。

+0

你的選擇器很好,你的名字值是錯的。 –

+0

固定。謝謝.. – Si8

2

你的選擇將返回空。您的目標元素具有名稱,如「1」,「2」等,您的選擇器正在嘗試查找「s01」,「s02」等。

您的代碼應爲var nn = $(this).attr('id').replace('s0', '');或重命名要滾動的元素適當地。

1

您在做選擇時$('<a name="'+nn+'">')是錯誤的。它應該是:

$('a[name="'+nn+'"]') 
+0

固定。謝謝.. – Si8