0

jQuery を使用してボタンにイベント リスナーを設定しましたが、何らかの理由でボタンをクリックせずにクリック リスナー内の関数が呼び出されます。通常、関数はリスナーでは匿名ですが、匿名関数としては機能しません。私が呼び出している関数もパラメーターを受け入れる必要があるため、関数への参照を呼び出すことはできないと思います。クリックせずに関数が呼び出される問題を修正し、必要なパラメーターを関数に渡す方法についてのアイデアはありますか?

$('#keep-both').click(keepBothFiles(file, progress, audioSrc));

この関数を呼び出します

function keepBothFiles(file, progress, audioSrc) {
    ...
    ...
}
4

2 に答える 2

14

関数を正しく参照していません。代わりにこれを試してください:

$('#keep-both').click(function(){
  keepBothFiles(file, progress, audioSrc);
});

構文を使用するときは常に、インタープリターに関数をすぐに呼び出すように指示しますfuncName()()この.clickメソッドには、関数への参照を渡す必要があります。関数参照は名前だけで渡されます。次のこともできます。

$('#keep-both').click(keepBothFiles);

ただし、他の引数に渡すことはできません。デフォルトでイベントオブジェクトが与えられます

于 2013-07-08T05:03:19.333 に答える
3

関数呼び出しの結果ではなく、関数参照を .click() 関数に渡す必要があります。()関数名の最後にこのようなものを含めると、keepBothFiles(...)javascript に関数を今すぐ実行するように指示します。のような関数の名前を使用すると、keepBothFiles関数への参照が取得されます (後で呼び出すことができます)。

現在、関数をすぐに呼び出してから、その関数の戻り値 (関数参照ではない) を関数に渡しているため、目的の.click()処理が行われません。

keepBothFiles(file, progress, audioSrc)クリック ハンドラー コールバック関数は、jQuery で 1 つのパラメーター (イベント) だけが渡されるため、関数を直接呼び出すことはできません。

代わりに、2 番目のラッパー関数を使用して次のようにすることもできます。

$('#keep-both').click(function(e) {
    keepBothFiles(file, progress, audioSrc);
});
于 2013-07-08T05:03:07.883 に答える