jQuery:确定函数是否被调用为jQuery事件处理程序(回调)

Nic*_*uin 4 javascript jquery event-handling

我有一个JavaScript函数,可以直接调用,作为jQuery事件的回调.

在后一种情况下,jQuery Event对象将作为参数传递.当我直接调用函数时,我还提供了一个参数(不同类型,但仍然是一个Object).

因此,我需要能够检查(在函数体内)如何调用函数,以便知道它正在处理什么类型的参数.

有一个简单的方法吗?

T.J*_*der 11

接受参数,然后看看它是否instanceof jQuery.Event:

function yourFunction(e) {
    if (e instanceof jQuery.Event) {
        // ...it was an event handler call
    }
}
Run Code Online (Sandbox Code Playgroud)

实例 | 资源

不过,我建议避免这种事情.相反,我建议让事件处理程序调用目标函数(而不是使用目标函数作为实际的事件处理程序),如果你需要根据它的调用方式区分行为.

从您对该问题的评论:

我简单的尝试是:当直接调用函数时,我在第一个位置使用空值,在第二个位置使用有用的参数.

在这种情况下,它更容易:

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

你甚至不必传入null函数,只需要不带参数调用它.当你这样做,e将是undefined,这是假的.(事件对象jQuery传递处理程序永远不会是假的.)