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

反应物料界面自动完成元素焦点点击

法玮
2023-03-14

我有一个材质ui自动完成元素

<Autocomplete
  id="combo-box-demo"
  autoHighlight
  openOnFocus
  autoComplete
  options={this.state.products}
  getOptionLabel={option => option.productName}
  style={{ width: 300 }}
  onChange={this.selectProduct}
  renderInput={params => (
    <TextField {...params} label="Select Product Name" variant="outlined" />
  )}
/>;

当我单击按钮时,我希望这个元素得到焦点。

我尝试使用这里描述的引用,如何以编程方式对焦点输入作出反应

它适用于其他元素,但不适用于自动完成

请帮忙

共有2个答案

祝俊
2023-03-14

根据material ui早期版本4或当前版本5,您可以使用autoFocus道具简单地聚焦自动完成输入元素,如果autoFocus设置为true,则输入元素将聚焦在自动完成组件的每个第一次装载上。

const [query, setQuery] = useState('');

<Autocomplete
.....
 renderInput={(params) => {
  const { InputLabelProps, InputProps, ...rest } = params;
  return <InputBase
    {...params.InputProps}
                    {...rest} 
                     name="query"
                      value={query}  
                      onChange={handleSearch}
                      autoFocus

   />

}}

/>

//这只是一个例子,你可以按照你的意愿处理下面的功能

function handleOnSearch({ currentTarget = {} }) {
    const { value } = currentTarget;
    setQuery(value);
  }

如果要在单击按钮后打开自动完成输入:-

//button to be clicked to open autocomplete input
const clickButton=()=>{
setOpen(true)
}

const handleClose =()=>{
setOpen(false)
}

<Dialogue
close={handleClose}
open={open}

>
<DialogActions>
 <Autocomplete
    .....
     renderInput={(params) => {
      const { InputLabelProps, InputProps, ...rest } = params;
      return <InputBase
        {...params.InputProps}
                        {...rest} 
                         name="query"
                          value={query}  
                          onChange={handleSearch}
                          autoFocus
    
       />
    
    }}
    
    />

</DialogActions>

</Dialogue>

干杯!!!

朱经武
2023-03-14

您应该保存对TextField组件的引用,并在单击另一个元素(一旦触发某个事件)时使用此ref来聚焦。

let inputRef;

<Autocomplete
  ...
  renderInput={params => (
    <TextField
      inputRef={input => {
        inputRef = input;
      }}
    />
  )}
/>
<button
  onClick={() => {
    inputRef.focus();
  }}

以下是指向一个工作示例的链接:https://codesandbox.io/s/young-shadow-8typb

您可以使用Autocomplete的openOnFocus属性来决定是只关注输入,还是打开Autocomplete的下拉列表。

 类似资料:
  • 我第一次学习材料界面。我想自定义材质UI的文本字段。当文本字段未被选中时,我可以更改其样式;当文本字段聚焦时,我无法更改其样式。我正在使用将样式注入组件。我试过这个密码 问题: 如何更改焦点文本字段的样式?我们将不胜感激

  • 我在我的页面上有一组选项卡,当点击时,将活动选项卡切换到点击选项卡的值。这工作得很顺利,但是当我看到新的活动标签周围有一个蓝色的大焦点框时,我嘴里留下了一股酸味。有没有一种React-y方法来防止这种情况? 带有preventDefault()的onMouseDown={this.someMethod}是否可以工作?

  • 问题内容: 如果您具有以下HTML: 有没有一种办法风格,正在编辑不同于所有其他段落的段落是? 不会应用于正在编辑的段落。 如何为 正在编辑 的 段落 (-tag)设置不同的样式? 我希望使用仅CSS的解决方案,但也许我必须使用JavaScript。 编辑: 由于找不到纯CSS解决方案(对我来说,使用不是真正的解决方案),我现在正在寻找一些JavaScript行来设置要编辑节点上的属性。 问题答案

  • 使用JavaScript 可以从多个方面增强表单字段的易用性。其中,最常见的一种方式就是在用户填写完当前字段时,自动将焦点切换到下一个字段。通常,在自动切换焦点之前,必须知道用户已经输入了既定长度的数据(例如电话号码)。例如,美国的电话号码通常会分为三部分:区号、局号和另外4 位数字。为取得完整的电话号码,很多网页中都会提供下列3 个文本框: <input type="text" name="te

  • 我有一个带有

  • 我有一个select输入,我使用MaterialUI库中的TextField组件创建它。选择某些选项后,我需要手动失去焦点。我尝试使用'inputRef'prop引用TextField,这非常有效,但是当我尝试在这个函数上启动blur()函数时。选择输入。就像我在这里做的,但没有材料库。 我得到一个错误,blur()函数不存在。我了解材料用户界面使用自定义el。为了创建UI,我只针对一个div或其