当前位置: 首页 > 知识库问答 >
问题:

多个窗体控件字段的控件焦点

毋修为
2023-03-14

我有一个映射的输入字段列表:

                      <FormControl
                            name={row_index}
                            value={barcode.barcode}
                            placeholder="Barcode - then Enter"
                            onChange={this.onChange}
                            onKeyPress={this._handleKeyPress}
                            disabled={barcode.submitted}
                        />

我目前使用onKeyPress来处理提交:

_handleKeyPress = (e) => {
    if (e.key === 'Enter') {
        const name = e.target.name;
        const barcodes = this.state.barcodes;
        const this_barcode = barcodes[name];

        let apiFormatted = {"barcode": this_barcode.barcode, "uid": this.props.currentSession}
        this.postBarcodeAPI(apiFormatted, name)
    }
}

我试图关注当前输入字段成功提交后的下一个输入字段。React留档有一个示例,用于使用ref={(输入)=手动设置单个输入字段的焦点

编辑

根据Chase的回答,我正在链接到autofocus文档,尽管它在本例中不起作用。

https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/autofocus


共有2个答案

陶沛
2023-03-14

除非您已经设置了一个ref与关键字文本输入1,那么这是行不通的。另一个建议是将所有输入移动到一个单独的组件中,然后您可以使用this.props.children遍历所有输入,并在任何您想要的位置获取输入。

编辑:

您还可以使用自动对焦道具来确定输入是否应该对焦。

白念
2023-03-14

我的工作解决方案:

const focusing = index === lastSubmittedIndex + 1 ? true : false;
const refText = focusing || index === 0 ? input => input && input.focus() : null;

                        <FormControl
                            name={row_index}
                            value={barcode.barcode}
                            placeholder="Barcode - then Enter"
                            onChange={this.onChange}
                            onKeyPress={this._handleKeyPress}
                            disabled={barcode.submitted || barcode.apiCalling}
                            inputRef={refText}
                        />

我在代码中更正的内容:1)我应该使用inputRef而不是ref作为引导的FormControl组件,请参见此处。2) 我使用的是伊利亚·塞门诺夫非常简洁的代码。

更新我在页面上有其他按钮,当用户按下按钮并位于页面底部时,页面会跳到顶部。不知道为什么。

 类似资料:
  • 我应该让我的组件“受控”吗?什么是“最佳实践”?

  • 在谷歌Chrome中,一些客户无法进入我的支付页面。当尝试提交表单时,我遇到以下错误: name=''的无效窗体控件不可聚焦。 这是来自JavaScript控制台的。 我读到这个问题可能是由于隐藏的字段具有必需的属性。现在的问题是,我们使用的是.NET webforms required字段验证器,而不是html5 required属性。 谁得到这个错误似乎是随机的。有没有人知道解决这个问题的办法

  • 我正在写一个自动热键脚本,它可以摆弄一些Photoshop窗口和控件。 我需要能够解除当前焦点控件(比如Edit3)的焦点,这样之后就没有控件有焦点了(我可以解释为什么必要时我需要这么做,但这似乎无关紧要,我只需要解除所有控件的焦点)。 AHK的ControlFocus命令不提供这样的选项。 我尝试使用这样的Windows消息: 但它什么都没用。相比之下,另一种方法的效果与预期一致,并将重点放在控

  • 回忆第七章的CHECKER程序。这些程序显示了矩形网格。当您在一个矩形中按下鼠标按键时,该程序就画一个x;如果您再按一次鼠标按键,那么x就消失。虽然这个程序的CHECKER1和CHECKER2版本只使用一个主窗口,但CHECKER3版本却为每个矩形使用一个子窗口。这些矩形由一个叫做ChildProc的独立窗口消息处理程序维护。 如果有必要,无论矩形是否被选中,都可以给ChildProc增加一种向其

  • 本文向大家介绍.Net遍历窗体上控件的方法,包括了.Net遍历窗体上控件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了.Net遍历窗体上控件的方法。分享给大家供大家参考。具体分析如下: 本例实现遍历窗体上的控件以及找出TextBox控件,代码如下: 希望本文所述对大家的.Net程序设计有所帮助。

  • 本文向大家介绍C# Winform 子窗体访问父级窗体的控件和属性,包括了C# Winform 子窗体访问父级窗体的控件和属性的使用技巧和注意事项,需要的朋友参考一下 今天在做一个联系人管理的C#设计时,遇到了这个问题,我需要将父窗体中的textBox中的值传到子窗体并进行数据库查询操作,我用了new 父窗体().textBox.text;来进行值传递,然而并无卵用,经过多次试验,找到了一个比较简