Javascript 无法读取属性';价值';未定义的?

Javascript 无法读取属性';价值';未定义的?,javascript,Javascript,为了学习JavaScript,我正在编写一个小型文本编辑器GoogleChrome扩展。但我一直遇到这样的错误:无法读取未定义的属性“value”。每当tanquity.save(),但不是在tanquity.open()时调用这很奇怪,因为它们基本上是一样的,只是换了一方纸张只是一个 编辑: 在创建后调用它(除非它必须是整个DOM) 静听; 无论何时都会发生 宁静。拯救();被称为,但不是 当宁静的时候;那是 奇怪,因为它们基本上是 同样,只是换了个阵营 啊,但它们不一样,因为: save

为了学习JavaScript,我正在编写一个小型文本编辑器GoogleChrome扩展。但我一直遇到这样的错误:
无法读取未定义的属性“value”
。每当
tanquity.save(),但不是在
tanquity.open()时调用这很奇怪,因为它们基本上是一样的,只是换了一方<代码>纸张
只是一个

编辑:

在创建
后调用它(除非它必须是整个DOM)


静听;
无论何时都会发生 宁静。拯救();被称为,但不是 当宁静的时候;那是 奇怪,因为它们基本上是 同样,只是换了个阵营

啊,但它们不一样,因为:

save: function() {
    localStorage.setItem(this.lastOpenedPaper, this.paper.value);
},
这可能不正常,因为无法定义
此.paper.value

open: function() {
    this.paper.value = localStorage.getItem(this.lastOpenedPaper);
}
其中,这是将值设置为this.paper.value
,因此定义它与否并不重要

此外:


如果此代码未声明为
onload
或在创建
之后,这将不起作用,因为DOM树不是以其他方式构建的。

我使用了两个修复程序

1.)加载纸质文本区域后编写脚本。它是通过将脚本放在正文的末尾来完成的

2.)我发现
localStorage.setItem
localStorage.getItem
应该引用变量名,如中所示。在您的代码中,lastOpenedPaper将在开始时引用null值,因此它不会以该名称存储值,所以我尝试将其替换为just。您也可以使用其他var名称,或者直接使用varname作为
localStorage.setItem('anyvarname',this.paper.value))

代码:


变量宁静={
纸张:document.getElementById(“纸张”),
上次打开的文件:“刚刚”,
听:函数(){
this.paper.addEventListener(“keyup”,this.save,false);
},
保存:函数(){
localStorage.setItem(this.lastOpenedPaper,this.value);
},
打开:函数(){
this.paper.value=localStorage.getItem(this.lastOpenedPaper);
}
}

看起来像是
文档。getElementById(“paper”)
返回未定义。这个答案可能对您有用:它是在
创建完成后调用的。我已经准备好手动将lastOpenedPaper设置为test,手动创建test并使其等于某个任意字符串。加载工作正常,这意味着所有变量都指向正确的位置,只是保存有点奇怪。你能将代码粘贴到pastebin或fiddle.net中,以便我们检查它吗。。。尝试在save中添加dubuggind代码,如consol.log或alertit它与我粘贴的代码完全相同,只是html(不包括加载当前空白的.css的头标记,这不会导致问题)我通过在save函数中将this.paper.value更改为this.value使其正常工作。我希望textarea正在调用代码保存函数,以便替换this对象
save: function() {
    localStorage.setItem(this.lastOpenedPaper, this.paper.value);
},
open: function() {
    this.paper.value = localStorage.getItem(this.lastOpenedPaper);
}
document.getElementById("paper")
<script>
    var tranquility = {
     paper: document.getElementById("paper"),
     lastOpenedPaper: 'just',

     listen: function() {
        this.paper.addEventListener("keyup", this.save, false);
     },

     save: function() {
        localStorage.setItem(this.lastOpenedPaper, this.value);
     },

     open: function() {
        this.paper.value = localStorage.getItem(this.lastOpenedPaper);
     }
    }
</script>