当前位置: 首页 > 面试题库 >

如何以编程方式反应焦点输入

傅博容
2023-03-14
问题内容

我正在尝试实现一个非常简单的用例,UI功能,其中:

  1. 有一个带有一些内容的标签
  2. 如果单击,则将文本输入替换为可用标签的内容
  3. 用户可以编辑内容
  4. 按下回车键时,输入将隐藏并且标签将返回具有更新内容的内容

我最终可以完全正确(实际上是使用MongoBD后端,redux等),而我唯一做不到的事情(花了一整天的时间在Google上搜索和阅读SOF类似的帖子)是:

当我的文字输入出现时,我无法将焦点转移到它上!首先我这样累了:

<div className={((this.state.toggleWordEdit) ? '' : 'hidden')}>
<input id={this.props.word._id} className="form-control"
        ref="updateTheWord" 
        defaultValue={this.state.word}
        onChange={this.handleChange}
        onKeyPress={this.handleSubmit}
        autoFocus={this.state.toggleWordEdit}/></div>
    <div className={((this.state.toggleWordEdit) ? 'hidden' : '')}>
      <h3 onClick={this.updateWord}>
        {this.state.word}</h3>
    </div>

但是autoFocus肯定无法正常工作(我“猜测”是因为呈现了表单,但是处于隐藏状态,这使autoFocus毫无用处)。

接下来,我在this.updateWor中尝试了很多在Google和SOF上找到的建议:

this.refs.updateTheWord.focus();

与类似的建议一起都无效。我也试图愚弄React,只是看我是否能做点什么!我使用了真正的DOM:

    const x = document.getElementById(this.props.word._id);
    x.focus();

而且也不起作用。我什至无法理解的一件事是这样的建议:
使用ref作为html" target="_blank">方法(我“猜”),
我什至没有尝试,因为我有多个这些成分,我需要ref才能进一步获得价值。 ,每个组件,我无法想象如果我的引用没有命名,如何获得价值!

所以,请您提出一个想法,以帮助我了解如果我不使用Form(因为我需要一个输入框来替换标签),当CSS(Bootstrap)类丢失“隐藏吗?


问题答案:

您使用裁判的方式已不再是首选,也不是最佳实践。尝试这样的事情

class MyClass extends React.Component {
  constructor(props) {
    super(props);
    this.focus = this.focus.bind(this);
  }

  focus() {
    this.textInput.current.focus();
  }

  render() {

    return (
      <div>
        <input
          type="text"
          ref={(input) => { this.textInput = input; }} />
        <input
          type="button"
          value="Set Focus"
          onClick={this.focus}
        />
      </div>
    );
  }
}

更新
阵营16.3 向上您可以使用 React.createRef() API

class MyClass extends React.Component {
  constructor(props) {
    super(props);
    // create a ref to store the textInput DOM element
    this.textInput = React.createRef();
    this.focus = this.focus.bind(this);
  }

  focus() {
    // Explicitly focus the text input using the raw DOM API
    // Note: we're accessing "current" to get the DOM node
    this.textInput.current.focus();
  }

  render() {
    // tell React that we want to associate the <input> ref
    // with the `textInput` that we created in the constructor
    return (
      <div>
        <input
          type="text"
          ref={this.textInput} />
        <input
          type="button"
          value="Set Focus"
          onClick={this.focus}
        />
      </div>
    );
  }
}


 类似资料:
  • 我试图实现一个非常简单的用例,一个UI特性,其中: null 这些建议和类似的建议都不起作用。我也试着愚弄一下反应,看看我能不能做点什么!我使用了真实的DOM: 而且也没用。我甚至无法理解的一件事是这样的建议:将ref作为一个方法(我“猜测”),我甚至没有尝试它,因为我有很多这样的组件,我需要ref来进一步获得每个组件的值,我无法想象如果我的ref没有命名,我如何获得的值! 所以你能给出一个想法,

  • 当按下按钮时,是否可以将可访问性焦点(Voiceover foriOS和Talkback for Android)移动到定义的小部件? 我尝试过在语义包中搜索,但我找不到一种方法来获得它。 让屏幕阅读器从头开始重新启动语义树就足够了。 我有一个包含3个页面和按钮,可以使用向后/向前移动。我想使用按钮(调用)进行更改时,将焦点移动到页面的开头。

  • 问题内容: 我正在尝试以编程方式选择/聚焦一行。 我可以选择一行,但它不会呈现为 焦点 (未突出显示)。我已经尝试了以下代码的许多组合,但似乎没有任何效果。 是否可以通过编程突出显示行? 我正在使用JavaFX 2.2.21 问题答案: 尝试首先将请求放在表焦点上,然后将整个内容包装在一个文件中。

  • 我遇到了一个奇怪的错误,我的搜索输入组件,它失去了对每个按键的关注,不知道为什么。 我还得到了一个

  • 我用JavaFX编写了一个应用程序,它只能用于键盘的箭头。所以我在现场的舞台上阻止了MouseeEvent,我“倾听”关键事件。我还关闭了所有节点的聚焦: 现在我有了一些文本字段、复选框和按钮。我想更改输入控件的状态(文本字段,复选框,…)编程:例如,我想输入文本字段以编程方式编辑内容。所以我的问题是:如何输入非焦点可遍历的文本字段?因为textfield。requestFocus();自从我将f

  • 问题内容: 我目前正在从事一个项目,该项目要求我以编程方式将.class文件反编译为Java文件。IE我有一个程序,应该读取一个类文件并对其进行反编译,并将生成的Java源代码写入文件中。请帮我做。 编辑:我是反编译器世界的全新手。我已经看过一些API,但是我不知道到底该如何使用以及使用哪个API。任何形式的帮助将是非常可观的 编辑: 我尝试使用: 但是上面的代码只是在指定的目录中创建了一个名为“