Salve, mi scuso in precedenza per la mia ignoranza ma sono alle prime armi con questo linguaggio e cercando su questo e in altri forum non ho risolto il mio dubbio, anzi se possibile sono ancora più in confusione.
Il dubbio riguarda la barra di ricerca con autocompletamento per il mio sito.
Creato un array con gli elementi che corrispondono ai possibili risultati della ricerca, vorrei aggiungere un link ad ogni elemento del vettore che rimanda ad una specifica parte (nel mio caso un accordion) di un'altra pagina, che viene raggiunta al click di quell'elemento o al click del tasto submit.
Es: Digitando "I" e cliccando sul risultato suggerito "Inghilterra" vorrei andare a finire nella porzione di un'altra pagina (dello stesso sito) che tratta l'Inghilterra.
codice:
<form autocomplete="off" action="">
<div class="autocomplete" style="">
<input id="myInput" type="text" name="Ilmiostato" placeholder="Digita uno stato">
</div>
<input type="submit">
</form>
<script>
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("click", function (e) { closeAllLists(e.target);
});
}
var countries = ["Inghilterra", "Spagna", "Italia", "Grecia", "Germania", "Svizzera", "Irlanda"];
autocomplete(document.getElementById("myInput"), countries);
</script>
Scusandomi ancora per l'ignoranza e per l'eventualità che la questione sia già stata affrontata, ringrazio molto per l'eventuale disponibilità e porgo cordiali saluti.