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

如何在Material UI Labs自动完成中创建可点击的第一个选项

茹康裕
2023-03-14
问题内容

在下方,您可以找到有关自动完成功能的MUI文档的示例,在该示例中,我已经在选项列表之前将链接传递给了google。但是,我无法单击该选项,事件目标只是MuiAutocomplete,而不是<a>我正在传递的事件。

import React from "react";
import TextField from "@material-ui/core/TextField";
import Paper from "@material-ui/core/Paper";

import Autocomplete from "@material-ui/lab/Autocomplete";

const Link = ({ children }) => (
  <Paper>
    <a href="https://www.google.com/" rel="nofollow" target="_blank">
      Go to Google
    </a>
    {children}
  </Paper>
);

export default function ComboBox() {
  return (
    <Autocomplete
      id="combo-box-demo"
      options={top100Films}
      getOptionLabel={option => option.title}
      style={{ width: 300 }}
      renderInput={params => (
        <TextField {...params} label="Combo box" variant="outlined" fullWidth />
      )}
      PaperComponent={Link}
    />
  );
}

https://codesandbox.io/s/material-demo-
egi6p

有趣的是,对自动完成功能开放

    <Autocomplete
      open // add this prop
      id="combo-box-demo"
      options={top100Films}

使它能够按预期工作。

目前,我正在使用onMouseDown来完成这项工作,但是觉得这可能是一个不好的解决方案。


问题答案:

您可以通过添加以下内容来解决此问题:

      onMouseDown={event => {
        event.preventDefault();
      }}

到您的链接,以便您的Link组件看起来像:

const Link = ({ children, ...other }) => (
  <Paper {...other}>
    <a
      onMouseDown={event => {
        event.preventDefault();
      }}
      href="https://www.google.com/"
      rel="nofollow"
      target="_blank"
    >
      Go to Google
    </a>
    {children}
  </Paper>
);

我包含的一个单独的修复程序是通过任何其他道具传递给Paper组件(通过...other)。该Popper组件通过道具到Paper控制其定位部件,这样所述定位将不正确,而不这种变化。

之所以event.preventDefault()需要这样做,是因为重点在于单击之前的输入。鼠标向下移动的默认效果之一是将焦点从输入更改为链接。输入的onBlur将触发的列表框部分的关闭,Autocomplete这意味着该链接将不再存在,并且不会继续onClick该链接的行为。调用event.preventDefault()可防止发生焦点更改。



 类似资料:
  • 问题内容: 有谁知道用Knockout JS模板创建自动完成组合框的最佳方法吗? 我有以下模板: 有时候,这个清单很长,我想让Knockout在jQuery自动完成功能或一些直接的JavaScript代码方面表现出色,但收效甚微。 另外,jQuery.Autocomplete需要输入字段。有任何想法吗? 问题答案: 这是我编写的jQuery UI自动完成绑定。它的目的是镜像,,,与几个新增的选择要

  • 问题内容: 可以说我索引了以下字符串: 对于输入,我想建议: 我 很棒 我的 啤酒 对于输入,我想建议: 很棒的 披萨 很棒的 啤酒 等等 因此,我想在用户输入后提供下一个单词…此外,还应支持一些模糊性( aEwsome )。 我应该使用哪些建议者/分析者?我尝试了 术语 和 完成, 但这不是我想要的(例如,完成仅在搜索词组的开头时有效- 如果我传递位于索引字符串中间的词,则不会建议) 问题答案:

  • 我试图用datalist html创建一个自动完成。这是我代码:

  • 问题内容: 我已经在输入框中成功实现了GoogleMapsPlacesV3自动完成功能。它工作得很好,但是我很想知道当用户按下Enter时如何使它从建议中选择第一个选项。我想我需要一些JS魔术,但是我对JS非常陌生,并且不知道从哪里开始。 提前致谢! 问题答案: 在我最近工作的网站上实现自动完成功能时,我遇到了同样的问题。这是我想出的解决方案:

  • 问题内容: 我是新来的。我需要编写自定义的yii auto complete。我知道CJuiAutocomplete存在,但是我需要实现自己的自定义自动完成功能。任何人都可以指导我或帮助我开发自定义自动填充文本字段。在文本字段中显示名称时获取ID。 提前致谢 问题答案: 这是站点控制器中的操作… 这是您认为的搜索表单:

  • 问题内容: 如何创建带有可单击标签的HTML复选框(这意味着单击标签可以打开/关闭该复选框)? 问题答案: 方法1:包装标签标签 将复选框包装在标签内: 方法2:使用属性 使用属性(匹配复选框): 注意 :ID在页面上必须是唯一的! 说明 由于其他答案均未提及,因此标签最多可以包含1个输入并忽略该属性,并且将假定该属性用于其中的输入。 w3.org的摘录(重点介绍): [for属性]显式地将要定义