javascript - 我如何检测函数何时作为 jQuery 回调调用与直接调用?

标签 javascript jquery function

我正在使用 hoverIntent,作为其设置的一部分,它会调用一个函数。我认为这称为“引用函数”(正确吗?):

var HIconfig = {
     interval: 250,
     sensitivity: 8,
     over: myFunction,
     timeout: 100,
     out: myOtherFunction
};

但是,我有时想重用上述函数并显式传入 jQuery 对象。所以,我将其添加到函数中。

myFunction($myObject){
}

现在的挑战是弄清楚函数何时被 hoverIntent 引用或被显式调用。我的想法是我会检查 $(this) 是否包含特定的 DOM 元素:

myFunction($myObject){
     if($(this).is('li')){
       $myObject = $(this)
     };

     $myObject.doSomething...

}

但是...我遇到了问题。如果我注销 $(this) 和 $myObject 这些是结果:

通过 hoverIntent 调用:

$(this) = [li#Trigger-0.nav-main-tab]
$myObject = Object { originalEvent=, more...}

通过显式传递对象调用

$(this) = [Window PT02-home-page.php#]
$myObject = [li#Trigger-0.nav-main-tab]

我可以在第一个场景中测试 $(this).is('li'),因为它是真的。

但是我不能在第二个,因为当我尝试执行测试时,Firefox 不喜欢它:

g.nodeName is undefined

一个建议是切换到 1.4.1 并尝试通过 .isPlayObject 测试相反的版本:

if (jQuery.isPlainObject($myObject))...

这在 Firefox 中工作得很好。但是,IE8 始终返回 true。

我的问题:

  1. 就我的函数如何从 hoverIntent 调用与直接调用而言,我的逻辑是否有偏差?

  2. 如果没有,是否有一种方法可以始终如一地进行测试,看看我是否已将对象显式传递给函数中的变量?

最佳答案

我会以完全不同的方式来做这件事。首先,函数将 jQuery 对象作为参数很奇怪。走 jQuery 的路,把你的函数变成一个 jQuery 插件。为了在您的 hoverIntent 配置中使用,您可以将您的函数包装在另一个小函数中,或者使用新的 (1.4) jQuery.proxy() 函数来实现。

关于javascript - 我如何检测函数何时作为 jQuery 回调调用与直接调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2217426/

相关文章:

javascript - jQuery 中的动态搜索面板

c# - 一般函数题(C++/Java/C#)

javascript - Backbone Js - 解析数据问题

javascript - 刷新多个具有相同ID的div

python - 在按钮游戏功能中插入分数

JavaScript createElement 函数

javascript - 在 ng-repeat 中使用 "for...of"

javascript - ember 属性在 View 中不可用,仅 ID

javascript - 如何编写按钮 firefox 附加组件

javascript - 获取第一个和最后一个启用的项目