翼度科技»论坛 编程开发 .net 查看内容

原生js实现下拉框可输入

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
js实现下拉框可输入<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>前言<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>众所周知,html默认的下拉框是无法输入值的,然后最新的办法是用datalist和输入框绑定,但是很多浏览器不支持。然后还有很多框架提供的下拉框都是可输入的。但是公司的项目太老了,考虑到依赖性需要使用原生js去实现。<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>业务是这样,现在有一个输入框存在,需要在不改变这个输入框id的情况下让这个输入框能实现下拉框的效果。<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>代码实现<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>Js代码<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>我编写了一个函数用于接收元素id和下拉框的列表数据,函数内部需要完成下拉框的创建。<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>首先获取需要变成下拉框的输入框id,然后创建ul元素,然后为ul元素添加css属性,css代码在文章结尾。通过循环去创建li元素,在循环的内部不仅要创建li元素,还要为每个li设置data-key自定义属性作为下拉框的key。还需要为每个下拉框创建点击事件,也就是选中下拉框某个内容时,将li的内容赋值给input框,然后隐藏下拉框因为已经完成了选中操作。<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>hideOtherDropdowns隐藏未使用的下拉框,当我有多个下拉框的时候,点击第一个下拉框,再点击第二个下拉框的时候要让之前的下拉框隐藏,防止多个下拉框同时展开。<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>然后还需要为input框添加点击事件,当我点击input框的时候显示下拉列表,还需要为每个document添加点击事件,我点击其他dom的时候下拉框要隐藏,比如其他输入框,页面空白处。<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>最后将ul元素添加到input元素后面,并设置为relative定位模式。<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>
  1. window.addEventListener("DOMContentLoaded", function() {<input id="test" type="text"  placeholder="请选择"/>
  2. <br/>
  3. <input id="test2" type="text"  placeholder="请选择"/>    var options = [<input id="test" type="text"  placeholder="请选择"/>
  4. <br/>
  5. <input id="test2" type="text"  placeholder="请选择"/>      { key: "1", value: "选项1" },<input id="test" type="text"  placeholder="请选择"/>
  6. <br/>
  7. <input id="test2" type="text"  placeholder="请选择"/>      { key: "2", value: "选项2" },<input id="test" type="text"  placeholder="请选择"/>
  8. <br/>
  9. <input id="test2" type="text"  placeholder="请选择"/>      { key: "3", value: "选项3" },<input id="test" type="text"  placeholder="请选择"/>
  10. <br/>
  11. <input id="test2" type="text"  placeholder="请选择"/>      { key: "4", value: "选项4" }<input id="test" type="text"  placeholder="请选择"/>
  12. <br/>
  13. <input id="test2" type="text"  placeholder="请选择"/>    ];<input id="test" type="text"  placeholder="请选择"/>
  14. <br/>
  15. <input id="test2" type="text"  placeholder="请选择"/>    renderDropdown("test", options);<input id="test" type="text"  placeholder="请选择"/>
  16. <br/>
  17. <input id="test2" type="text"  placeholder="请选择"/>    renderDropdown("test2", options);<input id="test" type="text"  placeholder="请选择"/>
  18. <br/>
  19. <input id="test2" type="text"  placeholder="请选择"/>});<input id="test" type="text"  placeholder="请选择"/>
  20. <br/>
  21. <input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
  22. <br/>
  23. <input id="test2" type="text"  placeholder="请选择"/>function renderDropdown(id, options) {<input id="test" type="text"  placeholder="请选择"/>
  24. <br/>
  25. <input id="test2" type="text"  placeholder="请选择"/>  var input = document.getElementById(id);<input id="test" type="text"  placeholder="请选择"/>
  26. <br/>
  27. <input id="test2" type="text"  placeholder="请选择"/>  var dropdown = document.createElement("ul");<input id="test" type="text"  placeholder="请选择"/>
  28. <br/>
  29. <input id="test2" type="text"  placeholder="请选择"/>    <input id="test" type="text"  placeholder="请选择"/>
  30. <br/>
  31. <input id="test2" type="text"  placeholder="请选择"/>  dropdown.classList.add("dropdown-options");<input id="test" type="text"  placeholder="请选择"/>
  32. <br/>
  33. <input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
  34. <br/>
  35. <input id="test2" type="text"  placeholder="请选择"/>  for (var i = 0; i < options.length; i++) {<input id="test" type="text"  placeholder="请选择"/>
  36. <br/>
  37. <input id="test2" type="text"  placeholder="请选择"/>    var option = document.createElement("li");<input id="test" type="text"  placeholder="请选择"/>
  38. <br/>
  39. <input id="test2" type="text"  placeholder="请选择"/>    option.textContent = options[i].value;<input id="test" type="text"  placeholder="请选择"/>
  40. <br/>
  41. <input id="test2" type="text"  placeholder="请选择"/>    option.setAttribute("data-key", options[i].key);<input id="test" type="text"  placeholder="请选择"/>
  42. <br/>
  43. <input id="test2" type="text"  placeholder="请选择"/>    option.addEventListener("click", function() {<input id="test" type="text"  placeholder="请选择"/>
  44. <br/>
  45. <input id="test2" type="text"  placeholder="请选择"/>          input.value = this.textContent; // 将选中的值赋给 input<input id="test" type="text"  placeholder="请选择"/>
  46. <br/>
  47. <input id="test2" type="text"  placeholder="请选择"/>          var selectedKey = this.getAttribute("data-key");<input id="test" type="text"  placeholder="请选择"/>
  48. <br/>
  49. <input id="test2" type="text"  placeholder="请选择"/>          console.log("Selected key:", selectedKey);<input id="test" type="text"  placeholder="请选择"/>
  50. <br/>
  51. <input id="test2" type="text"  placeholder="请选择"/>          dropdown.classList.remove("show");<input id="test" type="text"  placeholder="请选择"/>
  52. <br/>
  53. <input id="test2" type="text"  placeholder="请选择"/>          console.log(input.value)<input id="test" type="text"  placeholder="请选择"/>
  54. <br/>
  55. <input id="test2" type="text"  placeholder="请选择"/>    });<input id="test" type="text"  placeholder="请选择"/>
  56. <br/>
  57. <input id="test2" type="text"  placeholder="请选择"/>    dropdown.appendChild(option);<input id="test" type="text"  placeholder="请选择"/>
  58. <br/>
  59. <input id="test2" type="text"  placeholder="请选择"/>  }<input id="test" type="text"  placeholder="请选择"/>
  60. <br/>
  61. <input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
  62. <br/>
  63. <input id="test2" type="text"  placeholder="请选择"/>  function hideOtherDropdowns() <input id="test" type="text"  placeholder="请选择"/>
  64. <br/>
  65. <input id="test2" type="text"  placeholder="请选择"/>  { <input id="test" type="text"  placeholder="请选择"/>
  66. <br/>
  67. <input id="test2" type="text"  placeholder="请选择"/>    var otherDropdowns = document.querySelectorAll(".dropdown-options"); <input id="test" type="text"  placeholder="请选择"/>
  68. <br/>
  69. <input id="test2" type="text"  placeholder="请选择"/>    for (var j = 0; j < otherDropdowns.length; j++) <input id="test" type="text"  placeholder="请选择"/>
  70. <br/>
  71. <input id="test2" type="text"  placeholder="请选择"/>    { if (otherDropdowns[j] !== dropdown)<input id="test" type="text"  placeholder="请选择"/>
  72. <br/>
  73. <input id="test2" type="text"  placeholder="请选择"/>       { <input id="test" type="text"  placeholder="请选择"/>
  74. <br/>
  75. <input id="test2" type="text"  placeholder="请选择"/>        otherDropdowns[j].classList.remove("show"); <input id="test" type="text"  placeholder="请选择"/>
  76. <br/>
  77. <input id="test2" type="text"  placeholder="请选择"/>      } <input id="test" type="text"  placeholder="请选择"/>
  78. <br/>
  79. <input id="test2" type="text"  placeholder="请选择"/>    } <input id="test" type="text"  placeholder="请选择"/>
  80. <br/>
  81. <input id="test2" type="text"  placeholder="请选择"/>  } <input id="test" type="text"  placeholder="请选择"/>
  82. <br/>
  83. <input id="test2" type="text"  placeholder="请选择"/>  input.addEventListener("click", function(e) {<input id="test" type="text"  placeholder="请选择"/>
  84. <br/>
  85. <input id="test2" type="text"  placeholder="请选择"/>    hideOtherDropdowns();<input id="test" type="text"  placeholder="请选择"/>
  86. <br/>
  87. <input id="test2" type="text"  placeholder="请选择"/>     //e.stopPropagation()的作用是阻止事件冒泡,使事件只在当前元素上触        发执行,不会继续传播到其他元素上。<input id="test" type="text"  placeholder="请选择"/>
  88. <br/>
  89. <input id="test2" type="text"  placeholder="请选择"/>    e.stopPropagation();<input id="test" type="text"  placeholder="请选择"/>
  90. <br/>
  91. <input id="test2" type="text"  placeholder="请选择"/>    dropdown.classList.toggle("show");<input id="test" type="text"  placeholder="请选择"/>
  92. <br/>
  93. <input id="test2" type="text"  placeholder="请选择"/>  });<input id="test" type="text"  placeholder="请选择"/>
  94. <br/>
  95. <input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
  96. <br/>
  97. <input id="test2" type="text"  placeholder="请选择"/>  document.addEventListener("click", function() {<input id="test" type="text"  placeholder="请选择"/>
  98. <br/>
  99. <input id="test2" type="text"  placeholder="请选择"/>    dropdown.classList.remove("show");<input id="test" type="text"  placeholder="请选择"/>
  100. <br/>
  101. <input id="test2" type="text"  placeholder="请选择"/>  });<input id="test" type="text"  placeholder="请选择"/>
  102. <br/>
  103. <input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
  104. <br/>
  105. <input id="test2" type="text"  placeholder="请选择"/>  input.insertAdjacentElement("afterend", dropdown);<input id="test" type="text"  placeholder="请选择"/>
  106. <br/>
  107. <input id="test2" type="text"  placeholder="请选择"/>  input.parentNode.style.position = "relative"; // 设置父元素的定位为相对定位<input id="test" type="text"  placeholder="请选择"/>
  108. <br/>
  109. <input id="test2" type="text"  placeholder="请选择"/>}
复制代码
Css代码<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>
  1. .test {<input id="test" type="text"  placeholder="请选择"/>
  2. <br/>
  3. <input id="test2" type="text"  placeholder="请选择"/>  position: relative;<input id="test" type="text"  placeholder="请选择"/>
  4. <br/>
  5. <input id="test2" type="text"  placeholder="请选择"/>  width: 200px;<input id="test" type="text"  placeholder="请选择"/>
  6. <br/>
  7. <input id="test2" type="text"  placeholder="请选择"/>  padding: 10px;<input id="test" type="text"  placeholder="请选择"/>
  8. <br/>
  9. <input id="test2" type="text"  placeholder="请选择"/>  border: 1px solid #ccc;<input id="test" type="text"  placeholder="请选择"/>
  10. <br/>
  11. <input id="test2" type="text"  placeholder="请选择"/>  cursor: pointer;<input id="test" type="text"  placeholder="请选择"/>
  12. <br/>
  13. <input id="test2" type="text"  placeholder="请选择"/>  background-color: #fff;<input id="test" type="text"  placeholder="请选择"/>
  14. <br/>
  15. <input id="test2" type="text"  placeholder="请选择"/>}<input id="test" type="text"  placeholder="请选择"/>
  16. <br/>
  17. <input id="test2" type="text"  placeholder="请选择"/>.dropdown-options {<input id="test" type="text"  placeholder="请选择"/>
  18. <br/>
  19. <input id="test2" type="text"  placeholder="请选择"/>  position: absolute;<input id="test" type="text"  placeholder="请选择"/>
  20. <br/>
  21. <input id="test2" type="text"  placeholder="请选择"/>  left: 0;<input id="test" type="text"  placeholder="请选择"/>
  22. <br/>
  23. <input id="test2" type="text"  placeholder="请选择"/>  width: auto;<input id="test" type="text"  placeholder="请选择"/>
  24. <br/>
  25. <input id="test2" type="text"  placeholder="请选择"/>  max-height: 200px;<input id="test" type="text"  placeholder="请选择"/>
  26. <br/>
  27. <input id="test2" type="text"  placeholder="请选择"/>  overflow-y: auto;<input id="test" type="text"  placeholder="请选择"/>
  28. <br/>
  29. <input id="test2" type="text"  placeholder="请选择"/>  list-style-type: none;<input id="test" type="text"  placeholder="请选择"/>
  30. <br/>
  31. <input id="test2" type="text"  placeholder="请选择"/>  margin: 0;<input id="test" type="text"  placeholder="请选择"/>
  32. <br/>
  33. <input id="test2" type="text"  placeholder="请选择"/>  padding: 0;<input id="test" type="text"  placeholder="请选择"/>
  34. <br/>
  35. <input id="test2" type="text"  placeholder="请选择"/>  background-color: #fff;<input id="test" type="text"  placeholder="请选择"/>
  36. <br/>
  37. <input id="test2" type="text"  placeholder="请选择"/>  border: 1px solid #ccc;<input id="test" type="text"  placeholder="请选择"/>
  38. <br/>
  39. <input id="test2" type="text"  placeholder="请选择"/>  border-top: none;<input id="test" type="text"  placeholder="请选择"/>
  40. <br/>
  41. <input id="test2" type="text"  placeholder="请选择"/>  z-index: 999;<input id="test" type="text"  placeholder="请选择"/>
  42. <br/>
  43. <input id="test2" type="text"  placeholder="请选择"/>  display: none;<input id="test" type="text"  placeholder="请选择"/>
  44. <br/>
  45. <input id="test2" type="text"  placeholder="请选择"/>}<input id="test" type="text"  placeholder="请选择"/>
  46. <br/>
  47. <input id="test2" type="text"  placeholder="请选择"/>.show{<input id="test" type="text"  placeholder="请选择"/>
  48. <br/>
  49. <input id="test2" type="text"  placeholder="请选择"/>    display: block;<input id="test" type="text"  placeholder="请选择"/>
  50. <br/>
  51. <input id="test2" type="text"  placeholder="请选择"/>}<input id="test" type="text"  placeholder="请选择"/>
  52. <br/>
  53. <input id="test2" type="text"  placeholder="请选择"/>.dropdown-options li {<input id="test" type="text"  placeholder="请选择"/>
  54. <br/>
  55. <input id="test2" type="text"  placeholder="请选择"/>  padding: 10px;<input id="test" type="text"  placeholder="请选择"/>
  56. <br/>
  57. <input id="test2" type="text"  placeholder="请选择"/>  cursor: pointer;<input id="test" type="text"  placeholder="请选择"/>
  58. <br/>
  59. <input id="test2" type="text"  placeholder="请选择"/>}<input id="test" type="text"  placeholder="请选择"/>
  60. <br/>
  61. <input id="test2" type="text"  placeholder="请选择"/>.dropdown-options li:hover {<input id="test" type="text"  placeholder="请选择"/>
  62. <br/>
  63. <input id="test2" type="text"  placeholder="请选择"/>  background-color: #f2f2f2;<input id="test" type="text"  placeholder="请选择"/>
  64. <br/>
  65. <input id="test2" type="text"  placeholder="请选择"/>}
复制代码
Html代码<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>
  1. <input id="test" type="text"  placeholder="请选择"/>
  2. <br/>
  3. <input id="test2" type="text"  placeholder="请选择"/>
复制代码
实现效果<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>
<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>
<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/><input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>来源:https://www.cnblogs.com/ZYPLJ/archive/2023/10/19/17773476.html<input id="test" type="text"  placeholder="请选择"/>
<br/>
<input id="test2" type="text"  placeholder="请选择"/>免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具