2017-02-22 42 views
1

如何將全局「x」變量的範圍縮小到局部變量? 請注意,僅僅在「showAddress」函數內移動「var x」將不起作用,因爲keyup事件偵聽器會將該變量重置爲0 evetytime。任何幫助表示讚賞。下拉菜單縮小全局變量範圍

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

對不起,但您在這裏想要問的問題是什麼? –

+0

「var x」目前被聲明爲全局的,代碼有效,但是它僅用於「showAddress」函數,因此我想將「var x」範圍從全局範圍縮小到本地範圍。 – Swartz

+0

爲什麼-1? – Swartz

回答

0

變量x應該記住最後選中的div,這就是爲什麼它具有全局範圍。將它移動到本地作用域將不起作用,因爲showAddress是keyup事件處理程序,每次keyup事件發生時它都會清除x的值。

+0

我曾試過,但它不工作,因爲「var x」重置每個keyup事件,因此它被宣佈爲全局。 – Swartz

+0

啊!我是怎麼錯過的。你是對的Swartz。變量x應該記住最後選中的div。我已經用這個更新了我的答案。我會想出其他解決方案。 –