我有一个功能,就像这样:
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);
仍然没有
答案 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);