在对话框中按下按钮时,专注于 TextField 不起作用 - Material UI

Posted

技术标签:

【中文标题】在对话框中按下按钮时,专注于 TextField 不起作用 - Material UI【英文标题】:Focus on TextField not working when button pressed in Dialog - Material UI 【发布时间】:2019-04-23 08:18:34 【问题描述】:

我的目标是通过单击此对话框中的按钮关闭对话框后将焦点设置在 Material UI TextField 上。

当我从不在对话框组件中的按钮调用以下代码时,它会起作用:

focusTitle = () => 
  this.setState( isOpen: false );
  this.myRef.current.focus();
;

按钮代码:

<Button onClick=this.focusTitle />

我要关注的文本字段代码:

<TextField
  inputRef=this.myRef
  label="Title"
  id="title"
  multiline
  rowsMax="4"
  value=this.state.title
  autoFocus=true
  className=classes.title
  helperText="Enter a catchy title"
  onChange=e => this.onTitleChange(e.target.value)
/>

但是,一旦我尝试从对话框中的按钮调用 focusTitle(),它就不会触发焦点。

对话框代码:

<Dialog
  open=this.state.isOpen
  onClose=this.focusTitle
  aria-labelledby="alert-dialog-title"
  aria-describedby="alert-dialog-description"
  >

  <DialogTitle id="alert-dialog-title">"Warning"</DialogTitle>

  <DialogContent>
    <DialogContentText id="alert-dialog-description">
      Warning Message!
    </DialogContentText>
  </DialogContent>

  <DialogActions>
    <Button onClick=this.focusTitle color="primary">
      OK
    </Button>
  </DialogActions>
</Dialog>

任何人都知道为什么我的 .focus() 在对话框的情况下不起作用?如果我在这两种情况下都记录 this.refs.myRef 它会显示完全相同的结果。

谢谢!

【问题讨论】:

【参考方案1】:

您的对话框可能有一个结束动画。只要动画在运行,focus()函数就不会被正确调用。

为防止这种情况发生,请为动画创建回调或为动画持续时间创建一个超时,以在之后触发focus()。像这样:

focusTitle = () => 
  this.setState( isOpen: false );

  setTimeout(
    function() 
      this.myRef.current.focus();
     
    .bind(this),
    500 // Change to duration of the animation
;

【讨论】:

以上是关于在对话框中按下按钮时,专注于 TextField 不起作用 - Material UI的主要内容,如果未能解决你的问题,请参考以下文章

如何专注于表格视图中视图之外的文本字段?

在移动 Safari 中按下后退按钮后,Javascript 停止在 iframe 中执行

通过单击按钮调用 onPaint()

知道何时在 ios 中按下 facebook 登录按钮

在 PyQt5 中按下时如何切换按钮文本

当我在颤动中按下 ElevatedButton 时,我希望能够更改 Fontfamily