18910140161

JavaScript-如何使用React处理以编程方式修改的输入中的撤销/重做?-堆栈溢出

顺晟科技

2022-10-18 13:51:47

100

尝试使用SELECT实现文本输入,将选项插入到输入中(在光标位置),我注意到撤销/重做行为与我尝试的浏览器(Chrome v94、Firefox 89、Safari 14、Edge v93)

不一致

下面是一个示例代码示例,您可以在其中注意到两个输入之间的行为差异,一个输入的值按原样设置,另一个输入的值转换为大写

ctrl/cmd + z用于撤消,而ctrl/cmd + shift + z仅用于在第一个输入

中重做

const { useState } = React;

const Example = () => {
  const [text, setText] = useState("");
  const [upperCaseText, setUpperCaseText] = useState("");

  return (
    <div className="App">
      <input
        type="text"
        value={text}
        onChange={({ target }) => setText(target.value)}
        placeholder="text set as is"
      />
      <input
        type="text"
        value={upperCaseText}
        onChange={({ target }) => setUpperCaseText(target.value.toUpperCase())}
        placeholder="text uppercased"
      />
    </div>
    )
};


ReactDOM.render(
  <Example />,
  document.body
);
<代码><;script SRC=“ https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js ”>;<;/script>;<;script SRC=“ https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js ”>;<;/script>;

这里

有一个类似的帖子和答案,但它只能在有限制的情况下工作,<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>已被弃用,并且在Firefox上不受支持。我还尝试调度事件并强制输入此处描述的值,甚至调度document.execCommand事件,但是尽管填充了输入字段,浏览器仍然无法将这些输入识别为用户输入,并将其排除在输入撤消/重做历史记录之外。

有没有一种方法可以让浏览器以与手动用户输入(按键或剪贴板粘贴)相同的方式处理对输入的编程更改,或者必须在此处实现自定义输入更改历史记录?


顺晟科技:

  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航