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

对话框-材质UI中按下按钮时,关注文本字段不工作

钱澄邈
2023-03-14

我的目标是通过单击对话框中的按钮,在关闭对话框后将焦点设置在材质UI文本字段上。

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

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)}
/>

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

对话框代码:

<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>

有人知道为什么我的. point()在对话框中不起作用吗?如果我记录this.refs.my参考文献在这两种情况下,它显示完全相同的结果。

非常感谢。

共有1个答案

寿意远
2023-03-14

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

要防止出现这种情况,请为动画创建回调或动画持续时间的超时,以在之后触发focus()。这样地:

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

  setTimeout(
    function() {
      this.myRef.current.focus();
     }
    .bind(this),
    500 // Change to duration of the animation
};
 类似资料:
  • 如何在单击按钮后聚焦文本字段。我尝试使用自动对焦,但没有成功:示例沙盒

  • 我想在一个材料UI按钮中居中文本,以便文本居中,而不管它旁边的图标。目前,图标包括在居中。 演示中的顶部两个按钮显示了它目前的外观,我正在寻找文本,因为它在底部两个按钮中出现。这些按钮的前后分别带有图标,而不影响按钮的文字。 最后两个是期望输出 https://codesandbox.io/s/material-demo-forked-tj8ko?file=/demo.js

  • 我不知道如何在材质UI中居中放置按钮。这是我的代码: 我怎样才能使我的按钮居中?

  • 我试图得到分页从材料UI,但我想中心的箭头和页数的按钮。 我试图通过创建

  • 我有一个JFrame调用一个新的JDialog,这个JDialog有一个关闭它的按钮。 当JDialog关闭时,JFrame应该重新绘制。但是当我用按钮关闭JDialog时,什么也不会发生,当我用经典的“X”按钮关闭时,就不会发生这种情况。 这是来自JFrame的windowListener: 这里是JDialog中关闭JDialog的按钮的代码: 就像我说的,监听器中的JFrame需要在JDia