jQuery イベントからのコールバックとして、直接呼び出すことができる JavaScript 関数があります。
後者の場合、jQuery Event オブジェクトが引数として渡されます。関数を直接呼び出すときは、引数も指定します (種類は異なりますが、オブジェクトです)。
したがって、関数がどのような種類の引数を扱っているかを知るために、関数がどのように呼び出されたかを (関数本体内で) チェックできる必要があります。
それを行う簡単な方法はありますか?
jQuery イベントからのコールバックとして、直接呼び出すことができる JavaScript 関数があります。
後者の場合、jQuery Event オブジェクトが引数として渡されます。関数を直接呼び出すときは、引数も指定します (種類は異なりますが、オブジェクトです)。
したがって、関数がどのような種類の引数を扱っているかを知るために、関数がどのように呼び出されたかを (関数本体内で) チェックできる必要があります。
それを行う簡単な方法はありますか?
引数を受け入れて、次のようになっているかどうかを確認します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 になることはありません。)
if 条件内で typeof() 演算子を試してください。引数の型が同じであることが判明した場合は、どちらの場合でも、渡すオブジェクト/イベントの両方に一意のプロパティを割り当ててから、そのプロパティを再度チェックしてください...