javascript - 为什么表单文本输入的 parseFloat(value) 给出 NaN?

标签 javascript

这会在浏览器警报中返回 NaN:

var in1 = parseFloat(document.getElementById('input1').value);
var form = document.getElementById('formC');

form.addEventListener('submit', function() {
    alert(in1);
});

但是这有效:

var form = document.getElementById('formC');

form.addEventListener('submit', function() {
    var in1 = parseFloat(document.getElementById('input1').value);
    alert(in1);
});

有人可以解释一下这是怎么回事吗?从错误来看,“in1”超出了“function()” block 的范围,但是“var”不会使其成为全局的吗?

html部分:

<form id="formC">
    <input type="text" id="input1">
</form>

最佳答案

因为在第一个示例中,您试图获取输入的值并立即解析其中的 float (在用户有机会向其中输入任何数据之前)。因此,尝试从空字符串中解析 float 将产生 NaN

但在第二种情况下,您要等到表单提交后才能获取数据,这是在用户在输入中输入了一些数据之后。

On page render the text field is blank.

是的,那就是运行时:

var in1 = parseFloat(document.getElementById('input1').value);

并将 in1 的值设置为 NaN

But in both cases I manually type a number (5 or 3) into the text field before clicking the submit button.

在第一种情况下,你做什么并不重要,因为变量 in1 已经有了它的值。太晚了,该行已经执行了。您没有代码可以将其更新为使用您输入的号码。

在第二种情况下,它会起作用,因为在您提交表单(即在输入字段中输入一些数据之后)之前,变量不会尝试获取值。

关于javascript - 为什么表单文本输入的 parseFloat(value) 给出 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55425170/

相关文章:

javascript - 创建具有值参数而不是引用的函数引用

javascript - 我的 JavaScript 似乎忽略了数组中的第一个元素

Ajax 响应文本中未执行 Javascript

javascript - 下拉列表更改时的 HTML 提交表单

javascript - Javascript onclick 的奇怪行为

javascript - Angular 形式 - 禁用 ng-required 验证

javascript - 如何在两个 react 组件之间建立共享状态?

javascript - 是否可以在 ES6 Set 实例上使用数组迭代方法?

javascript - 如果文件已存在于 multer 中,如何防止文件保存

javascript - 一切正常,但是当我单击编辑按钮时,每次都会添加一个逗号 (,)。我不会发现哪里出了问题?