javascript - 按回车键时关注下一个字段 React.js

标签 javascript reactjs

当我使用 React.js 在输入中单击输入时,我想找到一种方法来关注下一个字段

  @autobind
  handleKeyPress(event){
    if(event.key === 'Enter'){
      this.refs.email.focus();
    }
  }

  @autobind
  handleKeyPressEmail(event){
    if(event.key === 'Enter'){
      this.refs.zip_code.focus();
    }
  }

        <input
          onKeyPress={this.handleKeyPress}
          ref = 'name'
        />

        <input
          onKeyPress={this.handleKeyPressEmail}
          ref = 'email'
        />

        <input
          ref = 'zip_code'
        />

这是迄今为止我找到的最好方法,但是我不想每次都创建一个函数来重复自己的想法。有没有更好更简洁的方法来实现它?

最佳答案

如果<form>存在:

function handleEnter(event) {
  if (event.keyCode === 13) {
    const form = event.target.form;
    const index = Array.prototype.indexOf.call(form, event.target);
    form.elements[index + 1].focus();
    event.preventDefault();
  }
}
...
<form>
  <input onKeyDown={handleEnter} />
  <input onKeyDown={handleEnter} />
  <input />
</form>

CodePen

没有<form> :

function useFocusNext() {
  const controls = useRef([]);

  const handler = (event) => {
    if (event.keyCode === 13) {
      // Required if the controls can be reordered
      controls.current = controls.current
        .filter((control) => document.body.contains(control))
        .sort((a, b) =>
          a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING
            ? -1 : 1
        );

      const index = controls.current.indexOf(event.target);
      const next = controls.current[index + 1];
      next && next.focus();

      // IE 9, 10
      event.preventDefault();
    }
  };

  return useCallback((element) => {
    if (element && !controls.current.includes(element)) {
      controls.current.push(element);
      element.addEventListener('keydown', handler);
    }
  }, []);
};

...
const focusNextRef = useFocusNext();

<input ref={focusNextRef} />
<input ref={focusNextRef} />
<button ref={focusNextRef}>Submit</button>

CodePen

关于javascript - 按回车键时关注下一个字段 React.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38577224/

相关文章:

reactjs - setState 为嵌套对象删除值

javascript - jQuery/深/委派

javascript - 无法自动刷新 HTML 中的两个表

javascript - 带有 constrainTo 的 jqPlot - 获取拖动点值

javascript - react 通知系统

javascript - 使用 Google Protocol Buffer 在 C++ 和 JavaScript 端点之间序列化/反序列化数据?

reactjs - 刷新应用程序时,React Native Modals 保持打开状态

javascript - 在 React 中包含 Phaser JS,PIXI 未定义错误

javascript - 我们怎样才能将冒号之前的单词加粗,比如 aaaaa bb ccc 在 React js 中需要加粗

防止机器人提交表单的 JavaScript 代码