我使用hoverIntent,作为其设置的一部分,它将调用一个函数。我认为这被称为“引用函数”(对吗?):
var HIconfig = {
interval: 250,
sensitivity: 8,
over: myFunction,
timeout: 100,
out: myOtherFunction
};但是,我希望有时重用上述函数,并显式地传递一个jQuery对象。所以,我把它加到了函数中。
myFunction($myObject){
}现在的挑战是找出函数何时被hoverIntent引用或被显式调用。我的想法是检查$(这个)是否包含特定的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。
我的问题:
发布于 2010-02-07 16:59:16
我会采取完全不同的做法。首先,让一个函数以一个jQuery对象作为参数是很奇怪的。使用jQuery方式并将您的函数转换为jQuery插件。为了在hoverIntent配置中使用,可以将函数包装在另一个小函数中,也可以使用新的(1.4) jQuery.proxy()函数。
发布于 2010-02-07 17:02:53
与其传递一个对象,为什么不传递一个简单的布尔值来指示调用对象的位置,例如:
myFunction(asOption){
if(asOption) {
alert("called from hoverIntent");
} else {
alert("called from somewhere else");
}
}还是我完全搞错了重点?
发布于 2010-02-07 17:03:09
你让这件事变得不必要的复杂。只需对传递函数所期望的参数的回调使用包装:
var HIconfig = {
interval: 250,
sensitivity: 8,
// myFunction expects a jQuery object, so create one from the context
over: function() { myFunction($(this)) },
timeout: 100,
out: myOtherFunction
};...then,您可以跳过函数内部的检查:
myFunction($myObject)
{
$myObject.doSomething...
}https://stackoverflow.com/questions/2217426
复制相似问题