【问题标题】:New to code, running into this error "Uncaught TypeError: Cannot read property 'value' of null"新代码,遇到此错误“未捕获的类型错误:无法读取 null 的属性‘值’”
【发布时间】:2020-03-22 03:29:49
【问题描述】:

我是新人...就像是全新的代码新手,我一直在从事一个业余项目,我可以逐步将我正在学习的东西融入我的课程中,以帮助内化。我已经接触了基本的 HTML 和 JS,但还有很长的路要走。到目前为止,我的第一页是一个温度计算器,现在我正在学习一些 HTML,我想加入一个,因为我刚刚了解了它们,而不是浏览器提示。但是,我在这部分代码的标题中遇到了错误。

这是我正在使用的一段代码,它让我犯了错误

//getElementById() Method testing
let userTempNumberRaw = ''
let celsius = ''
let fahrenheit = ''
let kelvin = ''
let newton = ''
let userTempUnit
let userTempNumber

// Checks the userinput for unit in the dropdown and chooses which caluclation function to call

function bigFunction(){
	userTempUnit = document.getElementById(tempUnit).value
	userTempNumberRaw = document.getElementById(tempNumber).value
	userTempNumber = parseFloat(userTempNumberRaw)
	switch (userTempUnit.toUpperCase()){
	case 'KELVIN':
		kelvinCalc(userTempNumber)
				break;
	case 'CELSIUS':
		celsiusCalc(userTempNumber)
		break;
	case 'FAHRENHEIT':
		fahrenheitCalc(userTempNumber)
		break;
	case 'NEWTON':
		newtonCalc(userTempNumber)
		break;
	}
}
<h2> Enter your conversion information bellow. Thank you.</h2>
<!-- This segment is the submition form whereupon submit button is pressed, values are passed to our calculation functions -->
<form onsubmit="bigFunction()" action = "" method = "DIALOG">
  <br>
  <label for="temp-number">Enter the value of the temperature you are trying to convert</label>
  <br>
  <input type="number" name="tempNumber" id = "tempNumber" step = "1">
  <select id="tempUnit" name = "tempUnit">
    <option value="kelvin">Kelvin</option>
    <option value="celsius">Celsius</option>
    <option value="fahrenheit">Fahrenheit</option>
    <option value="newton">Newton</option>
    <label for="tempUnit">unit</label>
  </select>
  <input type="submit" value="Submit">
</form>

具体来说,它告诉我 document.getElementByID(tempUnit).value 和 document.getElementById(tempNumber).value 都是“value = null”。

我对此的预期结果是,在按下提交后,函数 bigFunction() 将运行,从而将刚刚提交的值拉到

id="tempUnit"

id="tempNumber"

来自两个输入字段并将它们分配给变量

userTempUnit

userTempNumberRaw。

我只是不明白为什么当他们已经提交值时它会说 value 为 null ,并且定义了像 Kelvin 这样的值。我需要以某种方式返回值吗?感谢您的帮助!

计算功能进一步下降。 如果我提交的信息过多或过少,我也很乐意回答问题。这是我的第一篇文章。

【问题讨论】:

  • tempUnit 是一个变量名称,而不是字符串 ID。
  • 您忘记添加以下变量值:let userTempUnit = 'tempNumber';让 userTempNumber = 'tempNumber';
  • 啊,所以我错过了 ID 周围的引号,导致它尝试将其作为变量读取。谢谢昆汀,我明白了这个问题。

标签: javascript html


【解决方案1】:

正如 Quentin 所评论的,JS 将 tempUnit 视为一个变量 - 当您使用 document.getElementById() 时,您需要将一个与您的元素 ID 匹配的字符串传递给它。试试:

userTempUnit = document.getElementById('tempUnit').value
userTempNumberRaw = document.getElementById('tempNumber').value

【讨论】:

  • doh,多么简单的修复。它似乎确实解决了我的“空”值问题。太感谢了!我的计算现在在我的控制台中很清楚,但它现在确实报告了“由于表单未连接而取消表单提交”的错误。我想我会开始四处挖掘,直到我知道接下来如何解决这个问题!
  • 没问题!欢迎来到编码世界:)
【解决方案2】:

您没有定义这两个变量 userTempUnit、userTempNumber。将其定义为空。

let userTempUnit = '';
let userTempNumber = '';

【讨论】:

  • Javascript 似乎可以让我在没有分配的情况下声明它们就好了。感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 2015-04-30
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
相关资源
最近更新 更多