Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 下拉菜单缩小全局变量范围_Javascript_Php_Ajax - Fatal编程技术网

Javascript 下拉菜单缩小全局变量范围

Javascript 下拉菜单缩小全局变量范围,javascript,php,ajax,Javascript,Php,Ajax,如何将全局“x”变量的范围缩小为局部变量? 请注意,简单地将“var x”移动到“showAddress”函数中是不起作用的,因为keyup事件侦听器会将变量重置为0 evetytime。感谢您的帮助 document.getElementById("where").addEventListener("keyup", showAddress, false); var x = 0; function showAddress (e) { var search = document.ge

如何将全局“x”变量的范围缩小为局部变量? 请注意,简单地将“var x”移动到“showAddress”函数中是不起作用的,因为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);
    }
}
document.getElementById(“where”).addEventListener(“keyup”,showAddress,false);
var x=0;
函数showAddress(e){
var search=document.getElementById(“where”).value;
如果(search.length<2){
document.getElementById(“addressNav”).innerHTML='';
返回0;
}否则{
var hr=新的XMLHttpRequest();
var url=“/handlers/suggestAddress.php”;
hr.open(“POST”,url,true);
hr.setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
hr.onreadystatechange=函数(){
如果(hr.readyState==4&&hr.status==200){
document.getElementById(“addressNav”).innerHTML=hr.responseText;
//点击地址
var divs=document.getElementById(“addressNav”).getElementsByTagName(“div”),i;
对于(i=0;i0){
x-=1;
}否则{
x=分段长度-1;
}
}否则如果(e.keyCode==40){
如果(x
变量x应该记住最后选择的div,这就是它具有全局作用域的原因。将其移动到本地作用域将不起作用,因为showAddress是keyup事件处理程序,它将在每次发生keyup事件时擦除x的值。

变量x应该记住最后选择的div,这就是它具有全局作用域的原因。将其移动到本地作用域将不起作用,因为showAddress是keyup事件处理程序,它将在每次keyup事件发生时删除x的值。

抱歉,但您试图在此处询问的问题是什么?“var x”当前声明为全局,代码有效,但它仅用于“showAddress”中吗函数,所以我想将“var x”的作用域从全局缩小到局部。为什么是-1???不用担心,我将向上投票:)对不起,但是您想问的问题是什么?“var x”当前声明为全局,代码可以工作,但是它只用于“showAddress”函数,所以我想缩小“var x”范围从全局到局部。为什么是-1???不用担心,我将向上投票:)我已经尝试过了,但它不起作用,因为“var x”在每个键控事件中都会重置,因此它被声明为全局。啊!我怎么会错过呢。你说得对,斯沃茨。变量x应该记住最后选择的div。我已经用它更新了我的答案。我会想出另一个解决方案。我已经尝试过了,但它不起作用,因为“var x”在每个键控事件中都会重置,因此它被声明为全局的。啊!我怎么会错过呢。你说得对,斯沃茨。变量x应该记住最后选择的div。我已经用它更新了我的答案。我会想出其他解决办法。