2011-03-07 109 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 ""; 
}