2011-03-07 105 views
4

我是新來的Javascript編程,這一次顯然已經「乾淨擊殺」我說:(........JavaScript不識別功能

下面的代碼片段通過搜索突出了一些文字和在修改各自的文本節點文本節點的搜索是通過使用jQuery的功能實現:

window.addEventListener("load", highlightSummarySentences , false);

function highlightSummarySentences() { 
    var docName = thisPage; 
    var numSentences = getCookie(docName+"Num"); 
    var linkSentenceNum = getCookie(docName + 'LinkingSentence'); 
    for(var i=0; i<numSentences; i++) { 
     var matchMe = getCookie(docName+i); 
     try { 
      if (matchMe && i==(linkSentenceNum)) { 
       highlightText(matchMe, clickedSentenceColour); 
      } 
      else if(matchMe){ 
       highlightText(matchMe, summarySentenceColour); 
      } 
     } catch (e) {; 
     } 
    } 
} 

for循環運行一次,並強調相應的文字後,它退出並在頁面完全變成白色以下。在錯誤控制檯中看到錯誤:

Error: getCookie is not defined

但我猜它不是getCookie。在上述事件之後,腳本拒絕識別任何函數或變量。我不知道什麼可能會導致腳本以這種方式行事。我正在開發Firefox。

請給我一個提示!讓我知道是否應該粘貼更多信息的代碼。

感謝,

+0

你在哪裏聲明的功能?你什麼時候調用add event listener?可能是一個時間問題 – corroded 2011-03-07 06:42:46

+0

'var docName = thisPage;'什麼是thisPage?它是一個全球變量?你能檢查完整的腳本嗎?我在firefox和chrome上使用firebug/Opera也有類似的開發工具 – Kumar 2011-03-07 06:45:21

+0

在使用'getCookie'之前是否先調用'setCookie'? – diEcho 2011-03-07 06:47:34

回答

3

你的描述(頁面在第一個循環後清除)聽起來像你在某處使用document.write()

是嗎? (可能在highlightText()中)

如果是:在加載文檔後不能使用write(),write()將覆蓋所有內容,js也將覆蓋所有內容,所以定義在某處的所有函數不再存在。

+0

我沒有使用document.write,但我通過添加span元素來突出顯示該句子,從而修改了文本節點的HTML。代碼儘管在許多網頁上運行良好。 – VJune 2011-03-07 08:01:09

1

如果您標記jQuery的,我建議你做到以下幾點:

<script> 
$(document).ready(function() { 
    window.addEventListener("load", highlightSummarySentences , false); }); 
</script> 
+2

或者只是'$(document).ready(highlightSummarySentences)' – 2011-03-07 06:46:31

+0

以上建議都不起作用,不過謝謝 – VJune 2011-03-07 08:01:40

5

getCookie()是不是由瀏覽器提供的功能。這段代碼可能期望getCookie()函數在代碼中的某處被聲明。 document.cookie是您用來從瀏覽器獲取cookie字符串的方式,但您必須解析並拆分它才能找到所需的數據。這就是你寫的getCookie函數會爲你做的。

+0

是的,我寫了getCookie來完成它,並且它在腳本中定義。 – VJune 2011-03-07 08:02:11

+0

這段代碼在執行的時候找不到,如果這是你收到的錯誤信息。因此,無論是宣稱是錯誤的,還是根本不存在,或者在一個無法訪問的範圍內。 – 2011-03-07 08:11:42

+0

這肯定沒有被宣佈爲錯誤。它可能以某種方式超出範圍。莫勒博士提出了一個原因。但代碼仍然在大部分頁面上運行。如果有人急於看看它,我可以在這裏粘貼熒光筆代碼。 – VJune 2011-03-07 08:23:50

0

添加此的getCookie()函數在頁面

function getCookie(cname) { 
    var name = cname + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0; i<ca.length; i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') c = c.substring(1); 
     if(c.indexOf(name) == 0) 
      return c.substring(name.length,c.length); 
    } 
    return ""; 
}