javascript - React-Semantic UI 调度事件不起作用

标签 javascript reactjs preact

我正在使用 React Semantic UI 创建一个文本输入,单击按钮时将输入文本。一切正常,只是此操作不会触发 onchange 事件,因此状态不会更新。

这是我将文本附加到输入的函数

const putTextAtCursor = (text, inputID) => {
  let inputElement = document.getElementById(inputID);
  console.log({ inputElement, inputID });
  let cursorPosition = 0;
  if (document.selection) {
    inputElement.focus();
    let selectionRange = document.selection.createRange();
    selectionRange.moveStart("character", -inputElement.value.length);
    cursorPosition = selectionRange.text.length;
  } else if (
    inputElement.selectionStart ||
    inputElement.selectionStart == "0"
  ) {
    cursorPosition = inputElement.selectionStart;
  }
  let origValue = inputElement.value;
  let newValue =
    origValue.substr(0, cursorPosition) +
    text +
    origValue.substr(cursorPosition);

  inputElement.value = newValue;
  let start = inputElement.selectionStart;
  inputElement.selectionStart = inputElement.selectionEnd = start + text.length;
  let event = new UIEvent("change");
  inputElement.dispatchEvent(event);
  inputElement.focus();
};

dispatchEvent 似乎没有被触发。完整演示为here

如何解决这个问题?

最佳答案

您应该使用此代码:

let input = inputElement;
let lastValue = input.value;
input.value = newValue;
let event = new Event('input', { bubbles: true });
let tracker = input._valueTracker;
if (tracker) {
    tracker.setValue(lastValue);
}
input.dispatchEvent(event);

而是这样:

  inputElement.value = newValue;
  let start = inputElement.selectionStart;
  inputElement.selectionStart = inputElement.selectionEnd = start + text.length;
  let event = new UIEvent("change");
  console.log(inputElement.onchange, "io");
  inputElement.dispatchEvent(event);

这是因为 React 的版本。了解这种情况的所有信息都在这篇文章中:https://github.com/facebook/react/issues/11488

关于javascript - React-Semantic UI 调度事件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57568227/

相关文章:

ruby-on-rails - 使用 webpack dev server 和 rails server 进行 webpack 热重载

javascript - Preact 不是在补水时替换 dom 元素吗?

sass - 如何像在 React 中那样在 Preact 中简单导入样式?

javascript - 从异步调用中只获取一个对象

javascript - 如果用户已经回答了我在提示中预先输入的内容,我该如何相应地发出提示警报?

Javascript Canvas 从图像中获取数据并显示它

javascript - 在 golang 和 Javascript 中生成相同的 SHA1 UUID

javascript - 数组更新时 ReactJS 组件更新

reactjs - 如何禁用 `deselect-option` 中的 `react-select` ?

preact - 为 Preact CLI 设置基本 URL