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()の値です。this2番目、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");
}
于 2012-09-04T08:35:04.930 に答える
1

の最初のパラメータcall()はコンテキスト(この場合this)であり、残りのパラメータは順番に引数配列に入ります。呼び出しの代わりに使用する場合apply()は、2つのパラメーターしかありません。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 に答える