需要在点击时将本地数组传递给函数

时间:2013-02-15 16:00:19

标签: javascript arrays function

我正在编写菜单系统,当用户点击特定行时我需要调用一个函数。我正在使用新函数来传递调用函数的div以及用户单击的行。一切顺利,直到我尝试将本地数组传递给函数。如果我执行以下操作:

for (i=0;i<tmpdropnumber;i++){
    var dv=document.getElementById(id+i);
    dv.style.cursor="pointer";  
    dv.onmouseover = new Function('dropover'+"('" + id + "','" + i + "')");
    dv.onmouseout = new Function('dropout'+"('" + id + "','" + i + "')");
    dv.onclick = new Function('dropclick'+"('" + id + "','" + i + "','"+tmparray1+"','"+tmparray2+"')");
}

正如您所期望的那样,数组作为字符串传递。我可以在函数中重建数组,但这似乎不够优雅。

如果我尝试以下内容:

for (i=0;i<tmpdropnumber;i++){
    var dv=document.getElementById(id+i);
    dv.style.cursor="pointer";  
    dv.onmouseover = new Function('dropover'+"('" + id + "','" + i + "')");
    dv.onmouseout = new Function('dropout'+"('" + id + "','" + i + "')");
    dv.onclick = new Function('dropclick'+"('" + id + "','" + i + "',"+tmparray1+","+tmparray2+")");
}

试图传递它崩溃的数组。有关如何实现这一目标的任何想法?我在我的代码中使用jquery,所以javascript或jquery解决方案都没关系。

2 个答案:

答案 0 :(得分:1)

而不是

dv.onclick = new Function('dropclick'+"('" + id + "','" + i + "','"+tmparray1+"','"+tmparray2+"')");

dv.onclick = function() {
    dropclick(id, i, tmparray1, tmparray2);
};

修改

将您的声明包装在匿名函数中:

(function(id, i) {
    dv.onclick = function() {
        dropclick(id, i, tmparray1, tmparray2);
    };
} (id, i));

答案 1 :(得分:1)

不要使用新功能。

您遇到了问题,因为在构建字符串时,数组将变为字符串。

绕过toString()

的基本思路
for (i=0;i<tmpdropnumber;i++){
    var dv=document.getElementById(id+i);
    dv.style.cursor="pointer";
    (function(id, i){  
        dv.onmouseover = function(){ dropover(id,i); };
        dv.onmouseout = function(){ dropout(id,i); };
        dv.onclick = function(){ dropclick(id,i, tmparray1, tmparray2); };
    })(id,i);
}

但实际上没有必要传入一个对象,id。

您始终可以使用this获取当前行,并且表中有rowIndex。你可以在表上有一个事件处理程序,并在表/ tbody上使用处理程序来捕获冒泡并使用target / srcElement。