0

我正在编写一个菜单系统,当用户单击特定行时,我需要调用一个函数。我正在使用新函数来传递调用该​​函数的 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 解决方案就可以了。

4

2 回答 2

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));
于 2013-02-15T16:03:25.803 回答
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。哎呀,您可以在桌子上拥有一个事件处理程序,并使用 table/tbody 上的处理程序来捕获冒泡并使用 target/srcElement。

于 2013-02-15T16:05:25.350 回答