2017-02-16 82 views
2

我之前在SO上检查过这个问题,无法根据其他问题给出的解决方案来解决此问题。Javascript未捕获TypeError:无法设置为空的属性'值'

我是JavaScript新手,正在尝试创建一个将英里转换为公里的功能,并获得了以下功能。我想将此段落元素设置为转换的值。

<p id="kValue"></p> 

var kilometersElement = document.getElementById("kvalue"); 
var milesElement = document.getElementById("mValue"); 

function convert() { 
    var km = (milesElement.value * 1.61); 
    km.toFixed(2); 
    console.log(km); 
    document.getElementById("kvalue").innerHTML = kilometersElement; 
} 

它将km的值打印到控制台,但在尝试执行下面的命令行时出现以下错误。

Uncaught TypeError: Cannot set property 'value' of null at convert (cmtk.js:41)

在第41行,我只是调用函数convert();

任何人都可以帮助我吗?

+0

的[为什么jQuery的或DOM方法等的getElementById找不到元素?]可能的复制(http://stackoverflow.com/questions/14028959/why-does-jquery-or-a-dom-method-如-getelementbyid-not-the-element) – Teemu

+0

检查这个链接,它给你错误的答案。 [http://stackoverflow.com/questions/14028959/why-does-jquery-or-a-dom-method-such-as-getelementbyid-not-find-the-element][1] – Adds

+1

您正在查找的ID kvalue,但它是千伏。 – techiServices

回答

1

检查此链接,它会给你错误的答案。

Why does jQuery or a DOM method such as getElementById not find the element?

调用值的方式取决于在你的代码调用它的顺序。

也尝试初始化的值:

VAR kilometersElement

VAR milesElement

function convert(miles) { 
    return (miles * 1.61).toFixed(2); 
} 

var kilometersElement = document.getElementById("kValue"); 
var miles    = document.getElementById("mValue"); 

var kilometers = convert(miles); 
console.log(kilometers); 
kilometersElement.innerHTML = kilometers; 
2

最有可能的,你忘了给您的<input>元素的“id`属性和价值。

<p id="kValue"></p> 
<form> 
    <input id="mValue" type="text" value=""> 
</form> 

<script> 

    function convertMilesToKm(miles) { 
     return (miles * 1.61).toFixed(2); 
    } 

    var miles = document.getElementById("mValue").value; //assuming textbox 
    var km = convertMilesToKm(miles); 

    console.log(km); 
    document.getElementById("kvalue").innerHTML = km; 

</script> 

OR

<script> 

    function showOutput(results, outputElement){ 
     console.log(results); 
     outputElement.innerHTML = results; 
     return; 
    } 

    function convertMilesToKm(miles) { 
     return (miles * 1.61).toFixed(2); 
    } 

    var km = convertMilesToKm(document.getElementById("mValue").value); 
    showOutput(km, document.getElementById("kvalue")); 

</script> 

,或者可能

<output id="kValue"></output> <!-- HTML5.x only --> 
<form> 
    <input id="mValue" type="text" value=""> 
</form> 

<script> 

    function showOutput(results, outputElement){ 
     console.log(results); 
     outputElement.innerHTML = results; 
     return; 
    } 

    function convertMilesToKm(miles) { 
     return (miles * 1.61).toFixed(2); 
    } 

    showOutput(convertMilesToKm(document.getElementById("mValue").value), 
              document.getElementById("kvalue")); 

</script> 
+0

** Note **:1 mi = 1.609344 km –

+0

稍后,您会明白,在全局名称空间中使用较少的标识符有助于避免与外部库(如果选择使用它们)或任何共享代码发生冲突。我已经将它缩减为名称空间中的两个名称('displayOutput'和'convertMilesToKm')。当你在JavaScript中学习对象时,你可以将这些函数包装在一个对象中,并用对象创建名称空间。请参阅* JavaScript:权威指南,第6版或第7版* –

相关问题