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

时间:2013-02-13 12:00:19

标签: javascript jquery event-handling

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

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

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

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:11)

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

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

Live Example | Source

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

从您对该问题的评论:

  

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

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

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传递处理程序的事件对象永远不会是假的。)

答案 1 :(得分:-1)

在if条件中尝试typeof()运算符。如果参数类型相同,您可以尝试在两种情况下分配传递对象/事件的唯一属性,然后再次检查该属性......

相关问题