2009-11-30 34 views
0

我抓住了一些代碼,做一些尋呼與jQuery,通過盧卡Matteis這裏 Paging Through Records Using jQueryJavaScript的未定義的錯誤,但警報toSource顯示對象存在

我做了一些修改,以尋呼腳本,這樣我可以使用相同的代碼在同一站點的不同位置提供不同內容的分頁。

大多數情況下,我認爲它的工作原理,除了我得到一個jsonObj是在螢火蟲未定義的錯誤。 當我使用alert(jsonObj.toSource())時,我顯示了我正在嘗試填充的變量,但同時腳本因錯誤而死亡。 我不明白爲什麼我得到這個'未定義'的衝突,但我可以輕鬆地將'未定義'的值放在一個警報中。我甚至可以說alert(jsonObj.name),它會給我那個值,但是仍然啓動一個jsonObj是未定義的錯誤。

下面是我使用

var pagedContent = { 
data: null 
,holder: null 
,currentIndex : 0 
,init: function(data, holder) { 
    this.data = data; 
    this.holder=holder; 
    this.show(0); // show last 
} 
,show: function(index) { 
    var jsonObj = this.data[index]; 
    if(!jsonObj) { 
     return; 
    } 
    var holdSubset=''; 
    for(i=0;i<=4; i++){ 
    jsonObj=this.data[index+i]; 
    this.currentIndex = index; 
    if(this.holder=='div#firstList'){ 
    var returnedId = jsonObj.id; 
    var returnedName = jsonObj.name; 
    var calcScore=this.data[index+i].score/this.data[0].score*100; 
    var resultInput="<div ' id='"+returnedId+"'><div class='name'>"+returnedName+"</div><div class='score'><div style='width:"+calcScore+"%;'></div></div>"; 
    } 
    if(this.holder=='div#secondList'){ 
    var name=jsonObj.name; 
    var city=jsonObj.city; 
    var region=jsonObj.state; 
    var resultInput='<li><div>'+name+'</div<div>'+city+'</div><div>'+region+'</div></li>'; 
    } 
    holdSubset= holdSubset+resultInput; 
    } 

    jQuery(this.holder).html('<br/>'+holdSubset); 

    if(index!=0){ 
    var previous = jQuery("<a>").attr("href","#").click(this.previousHandler).text("< previous"); 
    jQuery(this.holder).append(previous); 
    } 

    if(index+i<this.data.length){ 
    var next = jQuery("<a style='float:right;'>").attr("href","#").click(this.nextHandler).text("next >"); 
    jQuery(this.holder).append(next); 
    } 
} 
,nextHandler: function() { 
    pagedContent.show(pagedContent.currentIndex + 5); 
    return false; 
} 
,previousHandler: function() { 
    pagedContent.show(pagedContent.currentIndex - 5); 
    return false 
} 
}; 

的代碼我這樣調用

pagedContent.init(json.users.locations, 'div#secondList'); 

的JSON看起來像這樣

{"locations" : [ {"id":"21319","name":"Naugatuck American Legion","city":"Ansonia","region":"Connecticut"},{"id":"26614","name":"Studio B789","city":"Acton","region":"Maine"},{"id":"26674","name":"Deering Grange Hall","city":"Bailey Island","region":"Maine"},{"id":"27554","name":"Accu Billiards","city":"Acushnet","region":"Massachusetts"}]} 
+0

看起來確定...有一個網址? – Greg 2009-11-30 20:02:30

+0

我還沒有網址,只是在本地運行。數據庫和一切都是本地的。我目前沒有位置放置它。 – pedalpete 2009-11-30 20:11:44

回答

1

我可能已經發現你的代碼的問題:

for(i=0;i<=4; i++){ 
    jsonObj=this.data[index+i]; 
    (...) 

當你調用show(0)設置指數爲0。您期望在區間[陣列(5項固定數量的0..4]),但數據中只有4個位置。

+0

你是完全正確的埃裏克,看起來似乎是問題所在。現在解決方案?我已將此

,show: function(index) { \t if(this.data.length<5){ \t var j=this.data.length-1; \t \t } else { \t var j=5; \t }
添加到show功能。這是你會建議的嗎? – pedalpete 2009-11-30 20:28:46

+1

不,我建議避免在代碼中設置固定長度,4或5。我不知道索引參數的作用是什麼,但是假設你想要處理所有的下面的內容,你應該爲(​​var i = index + 1; i 2009-12-01 15:36:09

0

如果您正在使用的console.log功能跟蹤螢火蟲中的問題,您可能會發現它是螢火蟲的問題。試着自己運行console.log。

如果這是螢火蟲的問題嘗試更新它。有一些開發版本可能解決這個問題。

我有一個類似的問題,並通過上述做了修復。