簡體   English   中英

將預選選項中的文本自動補全到輸入中

[英]Autocomplete text from pre-selected option into input

我正在嘗試實現一個自動完成文本功能,您從選項中選擇了一部分字符串。

您應該首先選擇您要尋找的飲料類型,通過在“選項”中選擇后鍵入字符來計算

開始片段:js 隱藏:假控制台:真 babel:假

語言:lang-html

 function insertFunction() { var x = document.getElementById("mySelect").value; document.getElementById("myInput").value = x; } 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; a = document.createElement("DIV"); a.setAttribute("id", this.id + "autocomplete-list"); a.setAttribute("class", "autocomplete-items"); this.parentNode.appendChild(a); for (i = 0; i < arr.length; i++) { if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase()) { 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] + "'>"; 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++; addActive(x); } else if (e.keyCode == 38) { currentFocus--; addActive(x); } else if (e.keyCode == 13) { 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); 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("change", function(e) { closeAllLists(e.target); }); } var drinks = ["Alcoholic - Beer", "Alcoholic - By country", "Alcoholic - Cider", "Alcoholic - Distilled", "Alcoholic - Cocktails", "Alcoholic - Hard soda", "Alcoholic - Wine", "Alcoholic - Caffeinated", "Alcoholic - Chocolate", "Alcoholic - Historic", "Alcoholic - Plant-based", "Alcoholic - Barley", "Alcoholic - Maize", "Alcoholic - Rice", "Alcoholic - Barley", "Alcoholic - Hot drinks", "Alcoholic - Mixed drinks", "Non-Alcoholic - Beer", "Non-Alcoholic - By country", "Non-Alcoholic - Cider", "Non-Alcoholic - Distilled", "Non-Alcoholic - Cocktails", "Non-Alcoholic - Hard soda", "Non-Alcoholic - Wine", "Non-Alcoholic - Caffeinated", "Non-Alcoholic - Chocolate", "Non-Alcoholic - Historic", "Non-Alcoholic - Plant-based", "Non-Alcoholic - Barley", "Non-Alcoholic - Maize", "Non-Alcoholic - Rice", "Non-Alcoholic - Barley", "Non-Alcoholic - Hot drinks", "Non-Alcoholic - Mixed drinks" ]; autocomplete(document.getElementById("myInput2"), drinks); autocomplete(document.getElementById("myInput"), drinks);
 * { 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; cursor: pointer; } .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; }
 <p>Select:</p> <select id="mySelect" onchange="insertFunction()" size="4"> <option value=" "> </option> <option value="Alcoholic">Alcoholic</option> <option value="Non-Alcoholic">Non-Alcoholic</option> <option value="Alcoholic - Cocktails">Happy Hour Specials</option> </select> <h2>Autocomplete</h2> <form autocomplete="off" action="/action_page.php"> <div class="autocomplete" style="width:300px;"> <input id="myInput" type="text" name="myDrink" placeholder="Drikns"> </div> <input type="submit"> </form>

你可以這樣做,通過在數組中添加每個類別,它更干凈..

 function autocomplete(inp, arra) { /*the autocomplete function takes two arguments, the text field element and an array of possible autocompleted values:*/ var currentFocus; /*execute a function when someone writes in the text field:*/ inp.addEventListener("input", function(e) { var mySelect = document.getElementById("mySelect").value; var arr = arra[mySelect] var a, b, i, val = this.value; /*close any already open lists of autocompleted values*/ closeAllLists(); if (!val) { return false;} currentFocus = -1; /*create a DIV element that will contain the items (values):*/ a = document.createElement("DIV"); a.setAttribute("id", this.id + "autocomplete-list"); a.setAttribute("class", "autocomplete-items"); /*append the DIV element as a child of the autocomplete container:*/ this.parentNode.appendChild(a); /*for each item in the array...*/ for (i = 0; i < arr.length; i++) { /*check if the item starts with the same letters as the text field value:*/ if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase()) { /*create a DIV element for each matching element:*/ b = document.createElement("DIV"); /*make the matching letters bold:*/ b.innerHTML = "<strong>" + arr[i].substr(0, val.length) + "</strong>"; b.innerHTML += arr[i].substr(val.length); /*insert a input field that will hold the current array item's value:*/ b.innerHTML += "<input type='hidden' value='" + arr[i] + "'>"; /*execute a function when someone clicks on the item value (DIV element):*/ b.addEventListener("click", function(e) { /*insert the value for the autocomplete text field:*/ inp.value = this.getElementsByTagName("input")[0].value; /*close the list of autocompleted values, (or any other open lists of autocompleted values:*/ closeAllLists(); }); a.appendChild(b); } } }); /*execute a function presses a key on the keyboard:*/ inp.addEventListener("keydown", function(e) { var x = document.getElementById(this.id + "autocomplete-list"); if (x) x = x.getElementsByTagName("div"); if (e.keyCode == 40) { /*If the arrow DOWN key is pressed, increase the currentFocus variable:*/ currentFocus++; /*and and make the current item more visible:*/ addActive(x); } else if (e.keyCode == 38) { //up /*If the arrow UP key is pressed, decrease the currentFocus variable:*/ currentFocus--; /*and and make the current item more visible:*/ addActive(x); } else if (e.keyCode == 13) { /*If the ENTER key is pressed, prevent the form from being submitted,*/ e.preventDefault(); if (currentFocus > -1) { /*and simulate a click on the "active" item:*/ if (x) x[currentFocus].click(); } } }); function addActive(x) { /*a function to classify an item as "active":*/ if (!x) return false; /*start by removing the "active" class on all items:*/ removeActive(x); if (currentFocus >= x.length) currentFocus = 0; if (currentFocus < 0) currentFocus = (x.length - 1); /*add class "autocomplete-active":*/ x[currentFocus].classList.add("autocomplete-active"); } function removeActive(x) { /*a function to remove the "active" class from all autocomplete items:*/ for (var i = 0; i < x.length; i++) { x[i].classList.remove("autocomplete-active"); } } function closeAllLists(elmnt) { /*close all autocomplete lists in the document, except the one passed as an argument:*/ 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]); } } } /*execute a function when someone clicks in the document:*/ document.addEventListener("click", function (e) { closeAllLists(e.target); }); } var list = { alcoholic : [ "Beer", "By country", "Cider", "Distilled", "Cocktails", "Hard soda", "Wine", "Caffeinated", "Chocolate", "Historic", "Plant-based", "Barley", "Maize", "Rice", "Barley", "Hot drinks", "Mixed drinks"], non_alcoholic : [ "Beer", "By country", "Cider", "Distilled", "Cocktails", "Hard soda", "Wine", "Caffeinated", "Chocolate", "Historic", "Plant-based", "Barley", "Maize", "Rice", "Barley", "Hot drinks", "Mixed drinks" ], happy_hower : [ "Beer", "By country", "Cider", "Distilled" ] } /*initiate the autocomplete function on the "myInput" element, and pass along the countries array as possible autocomplete values:*/ autocomplete(document.getElementById("myInput"), list);
 * { 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; cursor: pointer; } .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; }
 <p>Select:</p> <select id="mySelect" size="4"> <option value=" "> </option> <option value="alcoholic">Alcoholic</option> <option value="non_alcoholic">Non-Alcoholic</option> <option value="happy_hower">Happy Hour Specials</option> </select> <h2>Autocomplete</h2> <form autocomplete="off" action="/action_page.php"> <div class="autocomplete" style="width:300px;"> <input id="myInput" type="text" name="myCountry" placeholder="Country"> </div> <input type="submit"> </form>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM