纯Javascript听取输入值的变化

ges*_*nha 69 javascript

有什么办法可以创建一个监听输入的常量函数,所以当输入值改变时,会立即触发某些内容吗?

我正在寻找使用纯javascript,没有插件,没有框架的东西,我无法编辑HTML.

东西,例如:

当我更改输入中的值时MyObject,此函数将运行.

有帮助吗?

Que*_*tin 94

这就是事件的用途.

HTMLInputElementObject.addEventListener('input', function (evt) {
    something(this.value);
});
Run Code Online (Sandbox Code Playgroud)

  • 如果通过javascript更改输入值将无法工作 (5认同)
  • 请注意,“this.value 的类型”是“字符串”。如果需要数字,请使用 [parseInt](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt) 或 [parseFloat](https://developer. mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat)。 (2认同)
  • 继续@ImShogun 的评论。检查 [Azune-NK 的答案](/sf/answers/4356509671/) 以了解如何从 JavaScript 触发事件(如果您更改那里的值)。超级有帮助。 (2认同)

Nif*_*ler 27

作为一个基本的例子......

HTML:

<input type="text" name="Thing" value="" />
Run Code Online (Sandbox Code Playgroud)

脚本:

/* event listener */
document.getElementsByName("Thing")[0].addEventListener('change', doThing);

/* function */
function doThing(){
   alert('Horray! Someone wrote "' + this.value + '"!');
}
Run Code Online (Sandbox Code Playgroud)

这是一个小提琴:http://jsfiddle.net/Niffler/514gg4tk/

  • 如果输入内容被javascript更改,则无效.既没有"输入"也没有"改变"事件. (7认同)
  • 通过javascript更改值时,您可以听什么事件? (4认同)
  • 正如其他人指出的那样,直到您退出输入字段才触发。我知道,现在已经是旧答案了。但令人惊讶的是,这些答案经常出现,而且他们从未提及局限性。 (4认同)
  • @ImShogun 关于如何“支持”通过 JS 更改输入时的情况有什么想法吗? (2认同)

小智 17

默认用法

el.addEventListener('input', function () {
    fn();
});
Run Code Online (Sandbox Code Playgroud)

但是,如果您想在通过 JavaScript 手动更改输入值时触发事件,您应该使用自定义事件(任何名称,如“myEvent”、“ev”等)。如果您需要监听表单“更改”或“输入”事件,并且通过 JavaScript 更改输入值,则可以将自定义事件命名为“更改”或“输入”,它也可以工作。

var event = new Event('input');
el.addEventListener('input', function () {
  fn();
});
form.addEventListener('input', function () {
  anotherFn();
});


el.value = 'something';
el.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

创建和触发事件

  • 就是这个!谢谢。`element.dispatchEvent(new Event('change'))` 是关键。手动 JS 更改不会触发事件,这是没有道理的,但突然它会触发。把我涂成傻瓜。 (5认同)

Ame*_*icA 12

实际上,打勾的答案是完全正确的,但答案可能是ES6形状:

HTMLInputElementObject.oninput = () => {
  console.log('run'); // Do something
}
Run Code Online (Sandbox Code Playgroud)

或者可以写成如下:

HTMLInputElementObject.addEventListener('input', (evt) => {
  console.log('run'); // Do something
});
Run Code Online (Sandbox Code Playgroud)


Run*_*sis 6

另一种方法可以使用document.querySelector()

const myInput = document.querySelector('input[name="exampleInput"]');

myInput.addEventListener("change", (e) => {
  // here we do something
});
Run Code Online (Sandbox Code Playgroud)