无法读取未定义的属性“值”?

Posted

技术标签:

【中文标题】无法读取未定义的属性“值”?【英文标题】:Cannot read property 'value' of undefined? 【发布时间】:2011-08-25 08:05:22 【问题描述】:

为了学习 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>

【问题讨论】:

似乎document.getElementById("paper") 正在返回未定义。 这个答案可能对你有用:***.com/questions/415602/… 【参考方案1】:

我得到了它与两个修复工作

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

2.) 我发现 localStorage.setItemlocalStorage.getItem 应该像 http://hacks.mozilla.org/2009/06/localstorage/ 那样引用变量名。在您的代码中,lastOpenedPaper 将在开始时引用 null 值,因此它不会以该名称存储值,因此我尝试将其替换为 just。您也可以使用其他 var name 或直接使用 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,并且我已经准备好手动设置 lastOpenedPaper 等于 test,并手动创建 test 并使其等于某个任意字符串。加载工作正常,这意味着所有变量都指向正确,只是保存很奇怪。 您可以将您的代码粘贴到 pastebin 或 fiddle.net 中以便我们检查它...尝试在保存中添加 dubuggind 代码,例如 consol.log 或 alert 它和我粘贴的完全一样,除了html(不包括加载当前空白.css的head标签,这不会导致问题) 我通过在保存功能中将 this.paper.value 更改为 this.value 使其工作。我希望 textarea 调用了代码保存功能,因此替换了 this 对象【参考方案2】:

它发生在任何时候 宁静。保存();被调用,但不是 当宁静.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 或在创建 &lt;textarea&gt; 之后,这将不起作用,因为尚未构建 DOM 树。

【讨论】:

&lt;textarea&gt;创建后调用

以上是关于无法读取未定义的属性“值”?的主要内容,如果未能解决你的问题,请参考以下文章

无法读取未定义的属性“值”?

Angular 6:TypeError:无法读取未定义的属性“值”

未处理的拒绝(TypeError):在 React 中使用 useRef 时无法读取未定义的属性(读取“值”)

React-无法读取未定义的属性“setState”

Angular 10.2 构建:本地化包生成失败:无法读取未定义的属性“值”

ReactJS TypeError:无法读取未定义的属性(读取“地图”)