0

我有一个函数,如下所示:

menu[0].onclick = function() {
    filters.reset_all();
    clients.get();
}

因此,当用户单击第一个菜单元素时会调用它。现在我需要从另一个地方调用它,我所做的是:

    if (li.onclick) { //li and menu[0] above are the same
        li.onclick.call();
    }

它运作良好。

但现在我需要传递一些参数来onclick运行。我试过了,.call(some_param);arguments数组onclick是空的。

我究竟做错了什么?

编辑:更改为:

menu[0].onclick = function(arg) {
    console.log(arg);
    filters.reset_all();
    clients.get();
}

li.onclick.call(li,param);

依然没有

4

3 回答 3

3

第一个参数.call()this指针的值。第二个、第三个等...参数被传递给函数。.call()仅当您明确尝试设置this指针时才需要使用。否则,您可以直接调用该函数li.onclick()

事件处理程序通常由系统调用,当发生这种情况时,它们将作为第一个参数传递给事件对象。如果您想要一个可以使用不同参数的函数,您应该为此创建自己的函数,而不是使用事件处理函数。如果需要,您的事件处理程序也可以调用此其他函数。

menu[0].onclick = function() {
    myFunc("aaa");
}

function myFunc(arg1) {
    // do whatever here
    filters.reset_all();
    clients.get();
}

if (li.onclick) {
    myFunc("bbb");
}
于 2012-09-04T08:35:04.930 回答
1

的第一个参数call()是上下文(在这种情况下this),其余参数按顺序进入参数数组。如果您使用apply()而不是调用,那么您只有两个参数:apply(this, arguments_array)

于 2012-09-04T08:38:17.943 回答
1

它应该是

call(object, param1, param2, param3...);

在你的情况下,你可以写

li.onclick.call(li, param1);
于 2012-09-04T08:39:06.893 回答