【问题标题】:JavaScript onChange not working using DOM element [duplicate]JavaScript onChange无法使用DOM元素[重复]
【发布时间】:2016-10-12 15:41:16
【问题描述】:

我在尝试为 JavaScript 中的输入创建 onchange 侦听器时遇到问题:

var apple = document.getElementById("apple");
apple.addEventListener("change", validate("apple"));

function validate(fruitName){
    var qty = parseInt(document.getElementById(fruitName).value);
    console.log(qty);
}

每当用户输入“苹果”输入内容时,我都会尝试检查,我会在控制台打印数量。但是通过这样做,它只在我第一次通过打印出 NaN 刷新浏览器时运行,即使我更改了“apple”的输入也不起作用。

有什么想法吗?

提前致谢。

【问题讨论】:

  • 好吧,你不会返回任何将在更改事件中调用的函数
  • undefined 不是事件监听器。

标签: javascript


【解决方案1】:

你必须引用该函数,而不是调用它,并且你不需要传入名称以用作ID来获取元素,该元素在this中已经可用

var apple = document.getElementById("apple");

apple.addEventListener("change", validate);

function validate(event){
    var qty = parseInt(this.value, 10);
    console.log(qty);
}

每当您添加括号时,您都会调用该函数,并且返回的任何内容都会传递给事件处理程序。
因为函数默认返回undefined,这就是你得到的。

【讨论】:

  • 对不起,但我想做的是我尝试将作为 fruitName 的字符串也传递给 validate()
  • 因为这也是 ID,所以您可以使用 this.id 获得该名称,但使用 document.getElementById(this.id) 没有意义,因为它只会返回与 this 相同的内容。
  • 对不起,我想要做的是我实际上得到了一些水果。然后,当我调用 validate 时,我想传入水果名称,以便在代码的其他地方使用它。 var apple 实际上是数量,抱歉命名约定
  • 我有点困惑,你有一个输入,然后你改变那个输入,然后你用this.value得到数量,你为什么要传递数量?上面的代码你试过了吗?
猜你喜欢
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 2012-07-05
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 2017-12-21
相关资源
最近更新 更多