【问题标题】:Updating value of variable based on value of HTML input [duplicate]根据 HTML 输入的值更新变量的值 [重复]
【发布时间】:2022-02-26 16:20:08
【问题描述】:

我有一个只接受数字的 HTML 输入,在我的脚本文件中我有一个变量来获取输入的值。我想要做的是创建另一个等于第一个变量的变量。当我在输入字段上输入数字时,numInput 变量的值会发生变化,但不会在
value 变量上发生变化。
编辑 我想做的是,我想在我将要制作的一些函数上使用value 变量的值。

const numInput = document.getElementById("input");
const value = numInput.value;
<header> 
   <input type="number" name="numInput" id="input" class="input" min="0" value="1" required>
</header>

【问题讨论】:

  • 使用.valueAsNumber 代替.value 代表&lt;input type="number"&gt;。除此之外,是的,价值观不会自行改变。使用numInput.addEventListener("input", ({ valueAsNumber: value }) =&gt; { /* Use `value` here. */ }); 或类似的东西。你具体想用value做什么?什么时候?请edit 澄清。
  • 谢谢@SebastianSimon 我现在已经编辑了问题。

标签: javascript html


【解决方案1】:

value 没有改变的原因是因为它在分配期间保存了numInput.value 内容的副本,而不是指针或引用(我认为您无法在 JS 上执行此操作)。我建议按照@Sebastian Simon 的建议仅使用.valueAsNumber。

【讨论】:

  • valueAsNumber 几乎与安全无关;这只是为了方便起见,这也是 &lt;input type="number"&gt; 首先有用的原因。
  • 哦,我虽然是为了防止 XSS。我以为您正在尝试清理输入。更新中...
【解决方案2】:

JS 对象是 JS 中唯一不会在赋值给新变量时克隆的东西。这包括数组。

因此,为了模仿这种行为,您需要在每次更改时更新您的值,通常是通过添加一个事件侦听器。我选择使用 change 事件,如果值已更改涉及键盘的字段和选择/更改范围/日期(如果值已更改),则该事件只会在模糊时触发,但您可以使用 input 事件如果您也希望它在每次按键时都发生变化。快速阅读:

这样做时,value 也不能是常量,因为它会改变,所以它必须是一个变量。我选择了let 声明以获得更好的代码隔离,但如果您需要更大的灵活性,请务必使用var。

const numInput = document.getElementById("input");
let value = numInput.value;

numInput.addEventListener('change', () => {
    value = numInput.value;
});

【讨论】:

  • 仅供参考,常量不是变量类型。根据定义,它们要么是常量(const),要么是可变的、可变的、可变的(var、let)。这对于任何考虑改变我的答案的人来说尤其重要。
  • 感谢我能够使用此解决方案解决问题。
  • 考虑投票,@RDovez
【解决方案3】:

为了实现这一点,JavaScript 需要在 HTML 元素的输入值发生变化时触发一个函数。为此,需要一个事件监听器。

尝试更改输入值,以便您可以看到正在运行的代码:

document.getElementById("input").addEventListener('input', function(){
    let inputNumber = this.value
    console.log('your variable value is: ' + inputNumber)
})
<header> 
   <input type="number" name="numInput" id="input" class="input" min="0" value="1" required>
</header>

【讨论】:

  • 您的代码阻止在您的侦听器之外使用inputNumber,这很可能是 OP 想要的。
  • 另外,如果您担心变量或常量与对象属性的名称相同,那么您将面临一段艰难的编码时间,尽管避免通常是个好主意非描述性变量/常量名称。
  • @SEoF 这些建议是否旨在以某种方式提高答案或我的编码技能? ..我真的不明白会是这样。顺便提一下,SO 不是为他人编写代码的平台。
  • 他们提到他们想要一个变量来改变输入值的值。您的代码不会更改变量的值,而是创建一个新变量然后销毁它。因此,您的解决方案并不能解决问题。
  • 关于您的第二点,我已经提供了规范的链接,并详细说明了为什么我会按照我的方式进行更改。从教育的角度来看,这一切都有帮助。与您不同,我没有建议避免使用某些非常主观的变量名称,而不是提供解决方案或答案的一部分。
猜你喜欢
  • 2016-06-04
  • 2022-01-08
  • 2015-11-02
  • 2022-01-12
  • 2017-10-14
  • 2019-02-21
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
相关资源
最近更新 更多