如何在React中实现输入自动制表(重点放在keyup事件的下一个输入元素上)?

虚无

使用React作为库,我有几个输入文本块,每个块的maxlength = 1,并且我想实现一个函数,每次在输入框中输入字符时,焦点就会移到下一个。

这是我正在谈论的输入元素的列表:

在此处输入图片说明

这是CodesSandbox上的最小表示形式:https ://codesandbox.io/s/react-autotab-6kewb

如何在React中获得所需的行为?

这是相关的代码段:

const autoTab = e => {
  const BACKSPACE_KEY = 8;
  const DELETE_KEY = 46;

  if (e.keyCode === BACKSPACE_KEY) {
    // TODO: implement backwards autoTab
  } else if (e.keyCode !== DELETE_KEY) {
    // TODO: implement forwards autoTab
  }
};

const blocks = Array.from({ length: 10 }, (element, index) => (
  <input className="block" key={index} maxLength={1} onKeyUp={autoTab} />
));
基绍

我已将tab索引添加到您的输入元素,并使用它们在项目之间导航。

const autoTab = e => {
  const BACKSPACE_KEY = 8;
  const DELETE_KEY = 46;
  let tabindex = $(e.target).attr("tabindex") || 0;
  tabindex = Number(tabindex);
  if (e.keyCode === BACKSPACE_KEY) {
    tabindex -= 1;
  } else if (e.keyCode !== DELETE_KEY) {
    tabindex += 1;
  }
  const elem = $("[tabindex=" + tabindex + "]");
  if (elem[0]) {
    elem.focus();
  }
};

const blocks = Array.from({ length: 10 }, (element, index) => (
  <input
    className="block"
    tabIndex={index}
    key={index}
    maxLength={1}
    onKeyUp={autoTab}
  />
));

编辑:这是基于您的代码沙箱使用引用和演示一种新方法

const autoTab = e => {
  const BACKSPACE_KEY = 8;
  const DELETE_KEY = 46;
  let tabindex = $(e.target).attr("data-index") || 0;
  tabindex = Number(tabindex);
  let elem = null;
  if (e.keyCode === BACKSPACE_KEY) {
    elem = tabindex > 0 && elemRefs[tabindex - 1];
  } else if (e.keyCode !== DELETE_KEY) {
    elem = tabindex < elemRefs.length - 1 && elemRefs[tabindex + 1];
  }
  if (elem) {
    elem.current.focus();
  }
};

const Input = props => {
  const ref = React.createRef();
  elemRefs.push(ref);
  return (
    <input
      className="block"
      data-index={props.index}
      ref={ref}
      maxLength={1}
      onKeyUp={props.autoTab}
    />
  );
};

const blocks = Array.from({ length: 10 }, (element, index) => (
  <Input key={index} index={index} autoTab={autoTab} />
));

const App = () => <div className="App">{blocks}</div>;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

jQuery-将重点放在下一个输入上

如何通过输入将焦点放在剑道网格中的下一个单元格上

如何在下一个输入元素中获取选择选项数据

如何在React中实现上一个和下一个Button?

如何在 nodejs 中实现批处理功能,其中第一个函数的输出将输入到下一个函数

如何在 PHP 中持续等待下一个输入

无法移至下一个条目并在Xamarin中将重点放在该条目上

自动选择下一个输入字段并返回

自动聚焦下一个输入字段

遍历到下一个输入元素-JQuery

JS自动选择下一个输入并检测最后一个输入

在不同的行上输入下一个文本

自动跳至表格单元格中的下一个输入字段

用户在第一个字符中输入2个字符后,如何将焦点放在下一个UITextView上

如何启用/禁用下一个输入字段

Angular 6反应形式:如何将重点放在第一个无效输入上

如何在angular4中按Enter键专注于下一个输入字段

将重点放在MagicSuggests输入元素上

如何将下一个输入字段集中在按键上

从下一个控件触发KeyUp事件

如何在本机组件中集中输入的下一个字段

在Java中检查下一个输入是否同时是>和<时,如何检查下一个输入是否为整数?

用户移至下一个输入字段或释放输入字段时触发事件

如果输入被聚焦,则在触发下一个事件后文本流出输入

如何将焦点放在一个输入而不是React组件的所有输入上?

如何检索用户在自适应卡中输入的C#代码输入,以及如何调用提交按钮上的下一个意图

如何在primefaces 6.2上设置自动下一个数据网格分页

如何自动关注React中的特定输入字段(单击另一个元素之后)?

如何自动将下一个TextInput聚焦在react-native上