当输入的值以编程方式更改时触发更改事件

Posted

技术标签:

【中文标题】当输入的值以编程方式更改时触发更改事件【英文标题】:Trigger change events when the value of an input changed programmatically React 【发布时间】:2018-01-21 09:50:45 【问题描述】:

如果表单使用的是基于 React JS 的界面,并且输入字段值以编程方式更改,如何以编程方式触发值更改事件?

我了解 DOM 输入事件在 React 中被转换为合成更改事件。 所以这用于输入元素,它用于在以编程方式输入输入值后启用表单中的按钮。

var event = new Event('input',  bubbles: true );
inputElement.dispatchEvent(event);

但由于使用了更新版本的 React JS,可能不再起作用。 为什么这不起作用的任何原因? 现在有什么替代方案?我什至尝试触发诸如更改、焦点、模糊事件之类的事件,但它们都不起作用。 还尝试更改 value 属性而不是说

inputElement.value = "test";

但是上面的事件调度仍然不起作用。

【问题讨论】:

这不是 React,而是命令式编程。您需要更改道具或状态以重新呈现表单。 我试图以编程方式创建的表单肯定是使用 React。答案在这里的最后一条评论似乎说这在特定版本的 React 中不起作用,***.com/a/31056122/1127547 那么替代方案是什么?如何更改道具(我已经在更改输入字段的 value 属性)或状态以重新呈现表单? 使用setState。或者只是观看任何关于 React 的基本教程,这些教程将向您解释。 但是在以编程方式更改输入值并触发事件时,我不会使用 React。是否可以完全在 React 之外使用 setState 方法?对于基于 React 的表单,如何触发独立于 React 的事件。 我知道这不是正确的方法,但它确实有效。 import ReactTestUtils from 'react-dom/test-utils'; const element = document.activeElement; ReactTestUtils.Simulate.change(element); 【参考方案1】:

请参阅描述解决方案的this answer:

var setValue = Object.getOwnPropertyDescriptor(window.htmlInputElement.prototype, 'value').set;
setValue.call(input, 'my new value');

var e = new Event('input',  bubbles: true );
input.dispatchEvent(e);

这仅适用于input 标签;对于textarea,你需要HTMLTextAreaElement

【讨论】:

非常感谢。这很有帮助。

以上是关于当输入的值以编程方式更改时触发更改事件的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式更改值时触发Dojo Select onChange事件触发

directive ngChange

UITextField 更改事件不会针对语音或粘贴输入触发

对输入值进行编程更改时触发操作

如何在sqlalchemy中的值更改后触发事件

为啥尽管输入的值确实发生了变化,但 jquery 更改事件却没有触发? [复制]