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