本机浏览器自动完成功能不适用于 IE11、Firefox、MS Edge 中的 ReactJS 控制输入(仅适用于 chrome)

Dan*_*hin 5 forms firefox internet-explorer autocomplete reactjs

我需要在所有浏览器中为 React 中的受控输入制作本地浏览器表单自动完成功能(目前仅适用于 chrome)。

下面的代码片段来自 React Form 文档。(https://reactjs.org/docs/forms.html)。我只向 input 元素添加了 name 属性。可以在https://codepen.io/DChuhin/pen/ZNmdWj上运行的完整示例

因此,在代码笔中执行步骤后:1) 输入任何值 2) 提交提供的值 3) 提交后开始输入相同的值:在 chrome 中我可以看到我以前的输入作为自动完成选项,但在其他浏览器中它不起作用。

class NameForm extends React.Component {
  constructor(props) {
    super(props);
    this.state = {value: ''};

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleChange(event) {
    this.setState({value: event.target.value});
  }

  handleSubmit(event) {
    alert('A name was submitted: ' + this.state.value);
    event.preventDefault();
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input name="testName" type="text" value={this.state.value} onChange={this.handleChange} />
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

对此进行调查后,我发现问题在于,如果在提交表单时页面上的可见值等于 html(在检查器中)中的值属性,则浏览器(Chrome 除外)不会将输入值保存为自动完成选项(它被认为是用户没有输入任何输入)。但是由于 React 控制组件的想法是保持 value 属性始终是最新的(它始终等于页面上的 value),这种行为导致了无法为自动完成存储值的问题。

有谁知道如何解决它?