4

jQuery イベントからのコールバックとして、直接呼び出すことができる JavaScript 関数があります。

後者の場合、jQuery Event オブジェクトが引数として渡されます。関数を直接呼び出すときは、引数も指定します (種類は異なりますが、オブジェクトです)。

したがって、関数がどのような種類の引数を扱っているかを知るために、関数がどのように呼び出されたかを (関数本体内で) チェックできる必要があります。

それを行う簡単な方法はありますか?

4

2 に答える 2

11

引数を受け入れて、次のようになっているかどうかを確認しますinstanceof jQuery.Event

function yourFunction(e) {
    if (e instanceof jQuery.Event) {
        // ...it was an event handler call
    }
}

実例| ソース

ただし、このようなことは避けることをお勧めします。代わりに、呼び出された方法に応じて動作を区別する必要がある場合は、(ターゲット関数を実際のイベント ハンドラーとして使用するのではなく) イベント ハンドラーでターゲット関数を呼び出すことをお勧めします。

質問に対するあなたのコメントから:

私が簡単に試したのは、関数が直接呼び出されるとき、最初の位置に null 値を使用し、2 番目の位置に便利な引数を使用することです。

その場合は、さらに簡単です。

function yourFunction(e) {
    if (e) {
        // ...it was an event handler call -- or at least,
        // a non-falsey argument of some kind was passed in
    }
}

関数に渡す必要さえありませんnull。引数なしで呼び出すだけです。あなたがそれを行うと、eになりますがundefined、これは誤りです。(イベント オブジェクト jQuery がハンドラーを渡すと、falsey になることはありません。)

于 2013-02-13T12:03:23.367 に答える
-1

if 条件内で typeof() 演算子を試してください。引数の型が同じであることが判明した場合は、どちらの場合でも、渡すオブジェクト/イベントの両方に一意のプロパティを割り当ててから、そのプロパティを再度チェックしてください...

于 2013-02-13T12:02:59.587 に答える