2017-02-22 2 views
1

Wie kann die globale Variable "x" im Bereich auf lokale Variable reduziert werden? Bitte beachten Sie, dass das Verschieben des "var x" innerhalb der "showAddress" -Funktion nicht funktioniert, da der keyup Event-Listener die Variable immer auf 0 zurücksetzen wird. Jede Hilfe wird geschätzt.Dropdown-Menü globalen Variablenbereich reduzieren

document.getElementById("where").addEventListener("keyup", showAddress, false); 

var x = 0; 

function showAddress (e) { 

    var search = document.getElementById("where").value; 
    if (search.length < 2) { 
     document.getElementById("addressNav").innerHTML = ''; 
     return 0; 
    } else { 
     var hr = new XMLHttpRequest(); 
     var url = "/handlers/suggestAddress.php"; 
     hr.open("POST", url, true); 
     hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     hr.onreadystatechange = function() { 
      if (hr.readyState == 4 && hr.status == 200) { 
       document.getElementById("addressNav").innerHTML = hr.responseText; 


       // click on the address 
       var divs = document.getElementById("addressNav").getElementsByTagName("div"), i; 
       for (i = 0; i < divs.length; i++) { 
        divs[i].onclick = function() { 
         document.getElementById("where").value = this.innerHTML; 
         document.getElementById("addressNav").innerHTML = ''; 
        }; 
       } 

       //navigate address from keyboard 
       if (e.keyCode == 38) { 
        if (x > 0) { 
         x -= 1; 
        } else { 
         x = divs.length - 1; 
        } 
       } else if (e.keyCode == 40) { 
        if (x < divs.length - 1) { 
         x += 1; 
        } else { 
         x = 0; 
        } 
       } else { 
        if (e.keyCode == 13) { 
         document.getElementById("where").value = divs[x].innerHTML; 
         document.getElementById("addressNav").innerHTML = ''; 
        } 
       } 

       divs[x].setAttribute("class", "addressListKeyboard"); 
       console.log(x); 
      } 
     }; 
     hr.send("search=" + search); 
    } 
} 
+0

Sorry, aber was ist das Problem/die Frage, die Sie hier stellen möchten? –

+0

"var x" wird derzeit als global deklariert und der Code funktioniert, wird jedoch nur in der "showAddress" -Funktion verwendet, daher möchte ich den "var x" -Bereich von global auf lokal reduzieren. – Swartz

+0

warum die -1 ???? – Swartz

Antwort

0

Variable x sollte die zuletzt gewählte div erinnern und deshalb ist es globale Reichweite hat. Das Verschieben in den lokalen Bereich funktioniert nicht, da showAddress der keyup-Ereignishandler ist, der den Wert von x jedes Mal löscht, wenn das keyup-Ereignis auftritt.

+0

Ich hatte das versucht, aber es funktioniert nicht, da die "var x" jedes Keyup-Ereignis zurückgesetzt wird, daher wird es als global deklariert. – Swartz

+0

Ahhh! Wie habe ich das verpasst? Du hast Recht Swartz. Die Variable x sollte sich an das letzte ausgewählte div erinnern. Ich habe meine Antwort damit aktualisiert. Ich werde eine andere Lösung finden. –

Verwandte Themen