Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

操作指南

操作指南首页

菜单

图标栏 菜单图标 手风琴 标签 垂直标签 标签页标题 全页标签 悬停标签 顶部导航 响应式顶部导航 分割导航 带有图标的导航栏 搜索菜单 搜索栏 固定侧边栏 侧边导航 响应式侧边栏 全屏导航 画布外菜单 悬停侧边栏按钮 带有图标的侧边栏 水平滚动菜单 垂直菜单 底部导航 响应式底部导航 底部边框导航链接 右对齐菜单链接 居中菜单链接 等宽菜单链接 固定菜单 滚动时向下滑动栏 滚动时隐藏导航栏 滚动时收缩导航栏 粘性导航栏 图像上的导航栏 悬停下拉菜单 点击下拉菜单 级联下拉菜单 顶部导航中的下拉菜单 侧边导航中的下拉菜单 响应式导航栏下拉菜单 子导航菜单 向上弹出菜单 超级菜单 移动菜单 窗帘菜单 折叠侧边栏 折叠侧边面板 分页 面包屑导航 按钮组 垂直按钮组 粘性社交栏 药丸导航 响应式页眉

图像

幻灯片 幻灯片画廊 模态图像 灯箱 响应式图像网格 图像网格 图像画廊 可滚动图像画廊 标签页画廊 图像叠加淡入 图像叠加滑动 图像叠加缩放 图像叠加标题 图像叠加图标 图像效果 黑白图像 图像文本 图像文本块 透明图像文本 全页图像 图像上的表单 英雄图像 模糊背景图像 滚动时更改背景 并排图像 圆角图像 头像图像 响应式图像 居中图像 缩略图 图像周围的边框 认识团队 粘性图像 翻转图像 摇动图像 作品集画廊 带有过滤器的作品集 图像缩放 图像放大镜 图像比较滑块 网站图标

按钮

警报按钮 轮廓按钮 分割按钮 动画按钮 淡出按钮 图像上的按钮 社交媒体按钮 阅读更多阅读更少 加载按钮 下载按钮 药丸按钮 通知按钮 图标按钮 下一个/上一个按钮 导航中的更多按钮 块级按钮 文本按钮 圆形按钮 滚动到顶部按钮

表单

登录表单 注册表单 结帐表单 联系表单 社交登录表单 注册表单 带有图标的表单 时事通讯 堆叠表单 响应式表单 弹出表单 内联表单 清除输入字段 隐藏数字箭头 将文本复制到剪贴板 动画搜索 搜索按钮 全屏搜索 导航栏中的输入字段 导航栏中的登录表单 自定义复选框/单选按钮 自定义选择 切换开关 选中复选框 检测大写锁定 在 Enter 键上触发按钮 密码验证 切换密码可见性 多步骤表单 自动完成 关闭自动完成 关闭拼写检查 文件上传按钮 空输入验证

过滤器

过滤列表 过滤表格 过滤元素 过滤下拉菜单 排序列表 排序表格

表格

斑马纹表格 居中表格 全宽表格 嵌套表格 并排表格 响应式表格 比较表格

更多

全屏视频 模态框 删除模态框 时间线 滚动指示器 进度条 技能条 范围滑块 颜色选择器 电子邮件字段 工具提示 显示元素悬停 弹出窗口 可折叠 日历 HTML 包含 待办事项清单 加载器 徽章 星级评定 用户评定 叠加效果 联系人芯片 卡片 翻转卡片 个人资料卡片 产品卡片 警报 呼叫 笔记 标签 丝带 标签云 圆圈 样式 HR 优惠券 列表组 带徽章的列表组 无项目符号的列表 响应式文本 剪切文本 发光文本 固定页脚 粘性元素 等高 清除浮动 响应式浮动 Snackbar 全屏窗口 滚动绘图 平滑滚动 渐变背景滚动 粘性页眉 滚动时收缩页眉 价格表 视差 纵横比 响应式内联框架 切换喜欢/不喜欢 切换隐藏/显示 切换暗模式 切换文本 切换类 添加类 删除类 更改类 活动类 树形视图 删除小数 删除属性 脱机检测 查找隐藏元素 重定向网页 格式化数字 缩放悬停 翻转盒子 垂直居中 在 DIV 中居中按钮 居中列表 悬停过渡 箭头 形状 下载链接 全高元素 浏览器窗口 自定义滚动条 隐藏滚动条 显示/强制滚动条 设备外观 可编辑边框 占位符颜色 禁用文本区域调整大小 禁用文本选择 文本选择颜色 项目符号颜色 垂直线 分隔线 文本分隔线 动画图标 倒计时器 打字机 敬请期待页面 聊天消息 弹出聊天窗口 分屏 推荐信 部分计数器 报价幻灯片 可关闭的列表项 典型设备断点 可拖动的 HTML 元素 JS 媒体查询 语法高亮 JS 动画 JS 字符串长度 JS 幂运算 JS 默认参数 JS 随机数 JS 排序数字数组 JS 展开运算符 JS 滚动到视图中 获取当前日期 获取当前 URL 获取当前屏幕尺寸 获取内联框架元素

网站

创建免费网站 制作网站 制作静态网站 托管静态网站 制作网站 (W3.CSS) 制作网站 (BS3) 制作网站 (BS4) 制作网站 (BS5) 创建和查看网站 创建链接树网站 创建投资组合 创建简历 制作餐厅网站 制作企业网站 制作网络书籍 居中网站 联系部分 关于页面 大页眉 示例网站

网格

2 列布局 3 列布局 4 列布局 扩展网格 列表网格视图 混合列布局 列卡片 之字形布局 博客布局

谷歌

谷歌图表 谷歌字体 谷歌字体搭配 谷歌设置分析

转换器

转换重量 转换温度 转换长度 转换速度

博客

获得开发人员工作 成为前端开发人员 雇用开发人员

如何 - 自动完成


了解如何创建自动完成。


自动完成

开始键入


尝试一下 »


创建自动完成表单

步骤 1) 添加 HTML

示例

<!-- 确保表单的自动完成功能已关闭:-->
<form autocomplete="off" action="/action_page.php">
  <div class="autocomplete" style="width:300px;">
    <input id="myInput" type="text" name="myCountry" placeholder="国家">
  </div>
  <input type="submit">
</form>

步骤 2) 创建一个 JavaScript 数组

示例

全世界所有国家/地区的数组

var countries = ["阿富汗", "阿尔巴尼亚", "阿尔及利亚", "安道尔", "安哥拉", "安圭拉", "安提瓜和巴布达", "阿根廷", "亚美尼亚", "阿鲁巴", "澳大利亚", "奥地利", "阿塞拜疆", "巴哈马", "巴林", "孟加拉国", "巴巴多斯", "白俄罗斯", "比利时", "伯利兹", "贝宁", "百慕大", "不丹", "玻利维亚", "波斯尼亚和黑塞哥维那", "博茨瓦纳", "巴西", "英属维尔京群岛", "文莱", "保加利亚", "布基纳法索", "布隆迪", "柬埔寨", "喀麦隆", "加拿大", "佛得角", "开曼群岛", "中非共和国", "乍得", "智利", "中国", "哥伦比亚", "刚果", "库克群岛", "哥斯达黎加", "科特迪瓦", "克罗地亚", "古巴", "库拉索", "塞浦路斯", "捷克共和国", "丹麦", "吉布提", "多米尼克", "多米尼加共和国", "厄瓜多尔", "埃及", "萨尔瓦多", "赤道几内亚", "厄立特里亚", "爱沙尼亚", "埃塞俄比亚", "福克兰群岛", "法罗群岛", "斐济", "芬兰", "法国", "法属波利尼西亚", "法属西印度群岛", "加蓬", "冈比亚", "格鲁吉亚", "德国", "加纳", "直布罗陀", "希腊", "格陵兰", "格林纳达", "关岛", "危地马拉", "根西岛", "几内亚", "几内亚比绍", "圭亚那", "海地", "洪都拉斯", "香港", "匈牙利", "冰岛", "印度", "印度尼西亚", "伊朗", "伊拉克", "爱尔兰", "马恩岛", "以色列", "意大利", "牙买加", "日本", "泽西岛", "约旦", "哈萨克斯坦", "肯尼亚", "基里巴斯", "科索沃", "科威特", "吉尔吉斯斯坦", "老挝", "拉脱维亚", "黎巴嫩", "莱索托", "利比里亚", "利比亚", "列支敦士登", "立陶宛", "卢森堡", "澳门", "马其顿", "马达加斯加", "马拉维", "马来西亚", "马尔代夫", "马里", "马耳他", "马绍尔群岛", "毛里塔尼亚", "毛里求斯", "墨西哥", "密克罗尼西亚", "摩尔多瓦", "摩纳哥", "蒙古", "黑山", "蒙特塞拉特", "摩洛哥", "莫桑比克", "缅甸", "纳米比亚", "瑙鲁", "尼泊尔", "荷兰", "荷属安的列斯", "新喀里多尼亚", "新西兰", "尼加拉瓜", "尼日尔", "尼日利亚", "朝鲜", "挪威", "阿曼", "巴基斯坦", "帕劳", "巴勒斯坦", "巴拿马", "巴布亚新几内亚", "巴拉圭", "秘鲁", "菲律宾", "波兰", "葡萄牙", "波多黎各", "卡塔尔", "留尼汪", "罗马尼亚", "俄罗斯", "卢旺达", "圣皮埃尔和密克隆", "萨摩亚", "圣马力诺", "圣多美和普林西比", "沙特阿拉伯", "塞内加尔", "塞尔维亚", "塞舌尔", "塞拉利昂", "新加坡", "斯洛伐克", "斯洛文尼亚", "所罗门群岛", "索马里", "南非", "韩国", "南苏丹", "西班牙", "斯里兰卡", "圣基茨和尼维斯", "圣卢西亚", "圣文森特", "苏丹", "苏里南", "斯威士兰", "瑞典", "瑞士", "叙利亚", "台湾", "塔吉克斯坦", "坦桑尼亚", "泰国", "东帝汶", "多哥", "汤加", "特立尼达和多巴哥", "突尼斯", "土耳其", "土库曼斯坦", "特克斯和凯科斯群岛", "图瓦卢", "乌干达", "乌克兰", "阿拉伯联合酋长国", "英国", "美利坚合众国", "乌拉圭", "乌兹别克斯坦", "瓦努阿图", "梵蒂冈城", "委内瑞拉", "越南", "美属维尔京群岛", "也门", "赞比亚", "津巴布韦"];

步骤 3) 添加 CSS

容器必须具有“相对”定位。

示例

* { box-sizing: border-box; }
body {
  font: 16px Arial;
}
.autocomplete {
  /* 容器必须定位为相对:*/
  position: relative;
  display: inline-block;
}
input {
  border: 1px solid transparent;
  background-color: #f1f1f1;
  padding: 10px;
  font-size: 16px;
}
input[type=text] {
  background-color: #f1f1f1;
  width: 100%;
}
input[type=submit] {
  background-color: DodgerBlue;
  color: #fff;
}
.autocomplete-items {
  position: absolute;
  border: 1px solid #d4d4d4;
  border-bottom: none;
  border-top: none;
  z-index: 99;
  /* 将自动完成项定位为与容器相同的宽度:*/
  top: 100%;
  left: 0;
  right: 0;
}
.autocomplete-items div {
  padding: 10px;
  cursor: pointer;
  background-color: #fff;
  border-bottom: 1px solid #d4d4d4;
}
.autocomplete-items div:hover {
  /* 当悬停在项目上时:*/
  background-color: #e9e9e9;
}
.autocomplete-active {
  /* 当使用箭头键在项目中导航时:*/
  background-color: DodgerBlue !important;
  color: #ffffff;
}


步骤 4) 添加 JavaScript

示例

function autocomplete(inp, arr) {
  /* 自动完成函数接受两个参数,
  文本字段元素和可能的自动完成值的数组:*/
  var currentFocus;
  /* 当有人在文本字段中写入时执行函数:*/
  inp.addEventListener("input", function(e) {
      var a, b, i, val = this.value;
      /* 关闭任何已打开的自动完成值列表*/
      closeAllLists();
      if (!val) { return false;}
      currentFocus = -1;
      /* 创建一个 DIV 元素,它将包含项目(值):*/
      a = document.createElement("DIV");
      a.setAttribute("id", this.id + "autocomplete-list");
      a.setAttribute("class", "autocomplete-items");
      /* 将 DIV 元素作为自动完成容器的子元素追加:*/
      this.parentNode.appendChild(a);
      /* 对于数组中的每个项目...*/
      for (i = 0; i < arr.length; i++) {
        /* 检查项目是否以与文本字段值相同的字母开头:*/
        if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase()) {
          /* 为每个匹配的元素创建一个 DIV 元素:*/
          b = document.createElement("DIV");
          /* 使匹配的字母变为粗体:*/
          b.innerHTML = "<strong>" + arr[i].substr(0, val.length) + "</strong>";
          b.innerHTML += arr[i].substr(val.length);
          /* 插入一个输入字段,它将保存当前数组项的值:*/
          b.innerHTML += "<input type='hidden' value='" + arr[i] + "'>";
          /* 当有人单击项目值(DIV 元素)时执行函数:*/
              b.addEventListener("click", function(e) {
              /* 插入自动完成文本字段的值:*/
              inp.value = this.getElementsByTagName("input")[0].value;
              /* 关闭自动完成值的列表,
              (或任何其他打开的自动完成值列表:*/
              closeAllLists();
          });
          a.appendChild(b);
        }
      }
  });
  /* 在键盘上按下键时执行函数:*/
  inp.addEventListener("keydown", function(e) {
      var x = document.getElementById(this.id + "autocomplete-list");
      if (x) x = x.getElementsByTagName("div");
      if (e.keyCode == 40) {
        /* 如果按下箭头向下键,
        增加 currentFocus 变量:*/
        currentFocus++;
        /* 并使当前项目更显眼:*/
        addActive(x);
      } else if (e.keyCode == 38) { // up
        /* 如果按下箭头向上键,
        减少 currentFocus 变量:*/
        currentFocus--;
        /* 并使当前项目更显眼:*/
        addActive(x);
      } else if (e.keyCode == 13) {
        /* 如果按下 ENTER 键,阻止表单提交,
        e.preventDefault();
        if (currentFocus > -1) {
          /* 并模拟对“活动”项目的单击:*/
          if (x) x[currentFocus].click();
        }
      }
  });
  function addActive(x) {
    /* 将项目分类为“活动”的函数:*/
    if (!x) return false;
    /* 首先从所有项目中删除“活动”类:*/
    removeActive(x);
    if (currentFocus >= x.length) currentFocus = 0;
    if (currentFocus < 0) currentFocus = (x.length - 1);
    /* 添加类“autocomplete-active”:*/
    x[currentFocus].classList.add("autocomplete-active");
  }
  function removeActive(x) {
    /* 从所有自动完成项目中删除“活动”类的函数:*/
    for (var i = 0; i < x.length; i++) {
      x[i].classList.remove("autocomplete-active");
    }
  }
  function closeAllLists(elmnt) {
    /* 关闭文档中的所有自动完成列表,
    除了作为参数传递的列表:*/
    var x = document.getElementsByClassName("autocomplete-items");
    for (var i = 0; i < x.length; i++) {
      if (elmnt != x[i] && elmnt != inp) {
      x[i].parentNode.removeChild(x[i]);
    }
  }
}
/* 当有人单击文档时执行函数:*/
document.addEventListener("click", function (e) {
    closeAllLists(e.target);
});
}

步骤 5) 在“myInput”上启动自动完成效果

示例

将国家数组作为自动完成函数的第二个参数传递

<script>
autocomplete(document.getElementById("myInput"), countries);
</script>
尝试一下 »

×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.