用params打电话

时间:2012-09-04 08:29:47

标签: javascript

我有一个功能,就像这样:

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);

仍然没有

3 个答案:

答案 0 :(得分:3)

.call()的第一个参数是this指针的值。第2个,第3个等...参数传递给函数。如果您明确尝试设置.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");
}

答案 1 :(得分:1)

call()的第一个参数是上下文(在本例中为this),其余参数按顺序进入arguments数组。如果您使用apply()而不是通话,那么您只有两个参数:apply(this, arguments_array)

答案 2 :(得分:1)

应该是

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

在你的情况下,你可以写

li.onclick.call(li, param1);