我正在使用 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。
我的问题:
就我的函数如何从 hoverIntent 调用与直接调用而言,我的逻辑是否有偏差?
如果没有,是否有一种方法可以始终如一地进行测试,看看我是否已将对象显式传递给函数中的变量?
最佳答案
我会以完全不同的方式来做这件事。首先,函数将 jQuery 对象作为参数很奇怪。走 jQuery 的路,把你的函数变成一个 jQuery 插件。为了在您的 hoverIntent 配置中使用,您可以将您的函数包装在另一个小函数中,或者使用新的 (1.4) jQuery.proxy() 函数来实现。
关于javascript - 我如何检测函数何时作为 jQuery 回调调用与直接调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2217426/