【问题标题】:Can't add property to object (Cannot set property of undefined)无法向对象添加属性(无法设置未定义的属性)
【发布时间】:2016-02-15 19:57:56
【问题描述】:

我在向对象添加属性时遇到问题。我希望它,当您单击喜欢时,它将在“分数”对象内创建一个新属性,然后将该值加一。但是这样做时我收到了这个错误:

未捕获的类型错误:无法设置未定义的属性“(十六进制代码)”

HTML

<p style="display: inline;">Hex-code: </p>
<input id="demo" type="text">
<button onclick="generate()">Generate</button>

<div id="showcase" style="background: #FFF; width: 200px; height: 200px; margin: 20px; border-radius: 3px;"></div>

<button onclick="like()">Like</button>
<button onclick="dislike()">Dislike</button>

JAVASCRIPT

var result = document.getElementById('demo').innerHTML;
var hex;

var scores = {}

function generate () {
    var length = 3,
        charset = "ABCDEF0123456789",
        retVal = "";
    for (var i = 0, n = charset.length; i < length; ++i) {
        retVal += charset.charAt(Math.floor(Math.random() * n));
    }
    finalVal = "#" + retVal;
    document.getElementById('demo').value = finalVal;
    document.getElementById('showcase').style.backgroundColor = finalVal;
    return hex = retVal;
}

function like () {
    scores[hex] = 0;
    scores[hex] += 1;
    return generate();
}

小提琴链接:https://jsfiddle.net/elliotsoomro/o0kuwc0d/4/

【问题讨论】:

  • "hex"设置在generate()中,但是直到like()结束才调用generate,也就是说第一次调用like()时,hex不会有值.你需要初始化十六进制。而不是 var hex; 更改为 var hex=0;
  • 这是破坏之后一切的实际错误:Uncaught TypeError: Cannot read property 'innerHTML' of null
  • 如果您将代码放入 javascript 中,您的代码将起作用。更改 jsfiddle 内的 Javascript 代码区域中的设置。 Working code
  • @Michael 好的,谢谢!我会这样做的!

标签: javascript object properties set add


【解决方案1】:

您已将脚本包含在 html 的 &lt;head&gt; 中,但未将其包装在 window.onload 中。这会使这条线失败

var result = document.getElementById('demo').innerHTML;

因为在运行时未找到该元素,这进一步导致 score 由于上述中断错误而从未定义。

参见this updated fiddle,工作脚本包含在 html 的&lt;body&gt; 中。或者,您可以将代码的第一部分包含在 window.onload = function() {} 中,或者只是将

var result = document.getElementById('demo').innerHTML;

在您的 generate() 函数中。

【讨论】:

  • 非常感谢!非常新的编程,来自这个网站的惊人支持!
猜你喜欢
  • 1970-01-01
  • 2020-03-06
  • 2021-11-27
  • 2019-07-04
  • 2016-04-05
  • 2013-09-04
  • 1970-01-01
  • 2015-12-07
相关资源
最近更新 更多