Javascript将变量传递给事件函数

Javascript将变量传递给事件函数,javascript,Javascript,我无法将I的值传递给scMotion函数 for ( i = 0; i < tmp.length; i++ ) { document.getElementById("sc"+i).onmousedown=function() { return scMotion(i,'up') }; } for(i=0;i

我无法将I的值传递给scMotion函数

for ( i = 0; i < tmp.length; i++ ) {
document.getElementById("sc"+i).onmousedown=function() { return scMotion(i,'up') };
}
for(i=0;i
为了澄清这个问题,这个for循环正在做其他事情,向dom添加元素


出于某种原因,即使i位于数字39,在函数i中传递的i的值也是i.e.80的最终值。

在键入它时起作用,因为在
i
和函数之间应该有一个闭包:

var i="4";
document.getElementById("sc"+i).onmousedown=function() {
    return scMotion(i,'up'); // <-- due to the created closure, the i here
                             //     refers to the i above.
};
var i=“4”;
document.getElementById(“sc”+i).onmousedown=function(){

返回scMotion(i,'up');//,它在键入时起作用,因为在
i
和函数之间应该有一个闭包:

var i="4";
document.getElementById("sc"+i).onmousedown=function() {
    return scMotion(i,'up'); // <-- due to the created closure, the i here
                             //     refers to the i above.
};
var i=“4”;
document.getElementById(“sc”+i).onmousedown=function(){

返回scMotion(i,'up');//尝试使用addEventListener。您可以使用id将数字传递给函数

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

    var el = document.getElementById( "sc" + i );

    if ( el.addEventListener ) {

        el.addEventListener( 'mousedown', handleMouseDown ); 

    } else if ( el.attachEvent )  { // for IE8 and previous versions

        el.attachEvent( 'mousedown', handleMouseDown );

    }
}

function handleMouseDown( event ) {

    var num = event.target.id.replace( "sc", "" );
    scMotion( num, 'up' );
}
for(i=0;i
尝试使用addEventListener。您可以使用id将数字传递给函数

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

    var el = document.getElementById( "sc" + i );

    if ( el.addEventListener ) {

        el.addEventListener( 'mousedown', handleMouseDown ); 

    } else if ( el.attachEvent )  { // for IE8 and previous versions

        el.attachEvent( 'mousedown', handleMouseDown );

    }
}

function handleMouseDown( event ) {

    var num = event.target.id.replace( "sc", "" );
    scMotion( num, 'up' );
}
for(i=0;i
i
在不同的范围内。这就是问题所在。@xyu:也许你需要更新你关于JS中变量范围的知识,特别是关于闭包的知识。我知道它在不同的范围内,所以问题是如何让它在正确的范围内。@user1209203:范围没有问题。你能解释一下“问题”吗在声明变量开始时,
var
使其可访问。不同的作用域应该无关紧要。
i
在不同的作用域中。这就是问题所在。@xyu:也许你需要更新关于JS中变量作用域的知识,特别是关于闭包的知识。我知道它在不同的作用域中,所以如何将它放在正确的作用域中,这就是问题所在。@user1209203:范围没有问题。你能解释一下“问题”吗在声明变量的开始处,var
使其可访问。不同的范围应该无关紧要。这是我以前遇到的问题,但记不清具体的解决方案。这是我以前遇到的问题,但记不清具体的解决方案。