【问题标题】:Input value is a string instead of a number输入值是字符串而不是数字
【发布时间】:2015-01-08 21:36:34
【问题描述】:

当我在输入中添加一个数字时,它不会改变保持在 5 的值,当我进入控制台并输入 uw.value 时,我得到“6”而不是我在输入中输入的 6网络如何获取数字而不是字符串?

<form>
    <input type="number" id="wakken" type="number" value=5><br>
    <input max="30" min="0" name="ijsberen" placeholder="Ijsberen" id="ijsberen" type="number" value= "5"><br>
    <input max="30" min="0" name="wakken" placeholder="Penguins" id="penguins" type="number" value= 0><br>
    <input type="button" value="submit" onclick="check()">
</form>      
 var uw = document.getElementById("wakken")
 var ui = document.getElementById("ijsberen")
 var up = document.getElementById("penguins")

【问题讨论】:

  • 这听起来像是一种复杂的方式来询问“如何在 JavaScript 中将字符串转换为数字”。

标签: javascript html


【解决方案1】:

查看HTMLInputElement.@987654321@:

元素的值,按顺序解释为以下之一:

  1. 时间值
  2. 一个数字
  3. 如果无法进行转换,则为 null

var testInput = document.getElementById("test-input");

function handleInput(e){
  var value = this.valueAsNumber;
  console.log("type: %s, value: %o", typeof value, value);  
}

testInput.addEventListener("input", handleInput);
  
handleInput.call(testInput);
&lt;input type="number" id="test-input" type="number" value=5&gt;

这将为非数字或非有限数字返回 NaN

【讨论】:

  • 非常喜欢这个答案,我的朋友,valueAsNumber 对我来说是一个新的。我正在寻找与已知解析不同的东西。
  • 什么是“时间价值”?
  • @nafg 对于输入类型datetime,大概是“自UTC 1970 年1 月1 日午夜以来的毫秒数。+”
【解决方案2】:

HTMLInputElement.prototype.value(对于&lt;input&gt; 元素)是一个字符串

使用以下方法之一将您的数字字符串转换为正确的数字:

parseInt(value, 10);  // Parsing string as integer (whole number) from left to right.
parseFloat(value);    // Parsing string as floating point number (decimal) from left to right.
Number(value);        // Converting entire string to number.

JSBin demo.

或者,在值之前添加一元 +

+value;               // Equivalent to `Number(value)`.

要完全确定您的 value 是一个数字,您也可以这样做:

if(!isNaN(parseFloat(el.value)) && isFinite(el.value)){
  // true if element’s value is a number (or a number in string)
}

例如:

var uw = document.getElementById("wakken");
var ui = document.getElementById("ijsberen");
var up = document.getElementById("penguins");

// Log strings
console.log(uw.value);                // "5"
console.log(ui.value);                // "5"
console.log(up.value);                // "0"

// Log numbers
console.log(Number(uw.value));        // 5
console.log(+uw.value);               // 5
console.log(parseInt(ui.value, 10));  // 5
console.log(parseFloat(up.value));    // 0

别忘了阅读文档:

【讨论】:

  • 为什么在检查 not isNaN 时需要 parseFloat ?
【解决方案3】:

您可以使用parseFloat(value) 将值从字符串转换为数字,使用parseInt(value) 用于整数。

例如:

// uw will refer to the numerical value of the element with id = wakken
var uw = parseInt(document.getElementById("wakken").value);

【讨论】:

  • 我需要在哪里添加 parseFloat(value) 你可以在我的代码中进行编辑吗
  • @KnackKwenie 我在答案中添加了一个示例。
  • 当我这样做时,我得到了意外的令牌 var 或意外的令牌;
【解决方案4】:
var uw = parseInt(document.getElementById("wakken").value, 10); // (value, radix)
if (typeof uw === "number") console.log("works! 'uw' is an int");

将记录“works!'uw' is an int”,因为我们收集了值并使用 parseInt(_: String) 将其转换为 int。

【讨论】:

  • 佳能你能改进我的答案吗?
  • @canon 不要乱用typeof,改用!isNaN(parseFloat(value)) &amp;&amp; isFinite(value);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
相关资源
最近更新 更多