Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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::this.value在for循环中工作不正常?_Javascript_Arrays_This_Settimeout_Onmousedown - Fatal编程技术网

Javascript::this.value在for循环中工作不正常?

Javascript::this.value在for循环中工作不正常?,javascript,arrays,this,settimeout,onmousedown,Javascript,Arrays,This,Settimeout,Onmousedown,我的代码将很好地说明我将要实现的目标,但只是为了澄清 我想在长按后返回输入值(鼠标向下移动200毫秒) 它在for循环外工作得很好,但在for循环内似乎没有 对于this.value它返回未定义,对于gangina[i].value它不返回任何内容 以下是JSFIDLE: 这是我的密码: <input type=button value=1> <input type=button value=2> <script> var hezi; var gangi

我的代码将很好地说明我将要实现的目标,但只是为了澄清

我想在长按后返回输入值(鼠标向下移动200毫秒)

它在for循环外工作得很好,但在for循环内似乎没有

对于
this.value
它返回未定义,对于
gangina[i].value
它不返回任何内容

以下是JSFIDLE:

这是我的密码:

<input type=button value=1>
<input type=button value=2>

<script>

var hezi;
var gangina=document.getElementsByTagName("input");

alert(gangina[1].value); //THIS IS OK! :)

for(i=0;i<gangina.length;i++)
{

    gangina[i].onmousedown=function()
    {
        hezi=setTimeout
        (
            function()
            {
                alert('this = '+this.value); // = undefined
                alert('gangina['+i+'] = '+gangina[i].value); // = nothing
            },200
        );
    }

}

</script>

瓦尔·赫孜;
var gangina=document.getElementsByTagName(“输入”);
警报(gangina[1]。值)//这没关系!:)
对于(i=0;i

您可能需要将函数包装在iLife中,这将绑定
i

由于内部mousedown事件处理程序将在某个点执行,因此它将只记住
i
的最后一个值。请注意,这里您也忘了在i前面提到
var

如果您想为
i
分配正确的值,最好将内部函数包装在IIFE函数中,因为此时事件处理程序将引用局部作用域的
i
。因此它将始终记住
i
的正确值

for(var i=0;i<gangina.length;i++)
{
   (function(i) {
    gangina[i].onmousedown=function()
    {
        var that = this;
        hezi=setTimeout
        (
            function()
            {
                alert('this = '+that.value); // = undefined
                alert('gangina['+i+'] = '+gangina[i].value); // = nothing
            },200
        );
    }
  })(i);

}

for(var i=0;i)你能像这样在for循环中声明i变量吗?
for(var i=0;i)谢谢!