要学习JavaScript我正在编写一个小型文本编辑器Google Chrome扩展程序。但我一直收到这个错误:Cannot read property 'value' of undefined
。每当调用tranquility.save();
时就会发生这种情况,但是当tranquility.open();
奇怪时会发生这种情况,因为它们基本相同,只是切换了两侧。 paper
只是<textarea>
。
var tranquility = {
paper: document.getElementById("paper"),
lastOpenedPaper: localStorage.getItem("lastOpenedPaper"),
listen: function() {
this.paper.addEventListener("keyup", this.save, false);
},
save: function() {
localStorage.setItem(this.lastOpenedPaper, this.paper.value);
},
open: function() {
this.paper.value = localStorage.getItem(this.lastOpenedPaper);
}
}
修改
在创建<textarea>
之后调用它(除非它必须是整个DOM)
<body>
<textarea id="paper"></textarea>
<script src="../js/application.js"></script>
<script>
tranquility.listen();
</script>
</body>
答案 0 :(得分:3)
我使用了两个修复程序
1。)在加载纸张textarea后写入脚本。这是通过将脚本放在正文的末尾来完成的。
2.)我发现localStorage.setItem
和localStorage.getItem
应该像http://hacks.mozilla.org/2009/06/localstorage/一样引用变量名称。在你的代码中,lastOpenedPaper将在开始时引用null值,因此它不会在该名称中存储值,所以我尝试用just替换它。您也可以使用其他var名称或直接使用varname作为localStorage.setItem('anyvarname', this.paper.value);
代码:
<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>
答案 1 :(得分:1)
随时都会发生 tranquility.save();被称为,但不是 当tranquility.open();是的 奇怪,因为他们基本上是 同样,只是换了两边。
但是他们不一样,因为:
save: function() {
localStorage.setItem(this.lastOpenedPaper, this.paper.value);
},
这可能不合适,因为无法定义this.paper.value
open: function() {
this.paper.value = localStorage.getItem(this.lastOpenedPaper);
}
这是将值设置为this.paper.value
,因此定义与否无关紧要。
此外:
document.getElementById("paper")
如果此代码未声明onload
或创建<textarea>
之后,这将无效。因为DOM树尚未构建。