首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检测函数何时被调用为jQuery回调和直接调用?

如何检测函数何时被调用为jQuery回调和直接调用?
EN

Stack Overflow用户
提问于 2010-02-07 16:53:00
回答 3查看 2.9K关注 0票数 4

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

代码语言:javascript
运行
复制
var HIconfig = {
     interval: 250,
     sensitivity: 8,
     over: myFunction,
     timeout: 100,
     out: myOtherFunction
};

但是,我希望有时重用上述函数,并显式地传递一个jQuery对象。所以,我把它加到了函数中。

代码语言:javascript
运行
复制
myFunction($myObject){
}

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

代码语言:javascript
运行
复制
myFunction($myObject){
     if($(this).is('li')){
       $myObject = $(this)
     };

     $myObject.doSomething...

}

但是.我有问题。如果我同时注销$(this)和$myObject,结果如下:

通过hoverIntent呼叫:

代码语言:javascript
运行
复制
$(this) = [li#Trigger-0.nav-main-tab]
$myObject = Object { originalEvent=, more...}

通过明确传递对象调用

代码语言:javascript
运行
复制
$(this) = [Window PT02-home-page.php#]
$myObject = [li#Trigger-0.nav-main-tab]

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

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

代码语言:javascript
运行
复制
g.nodeName is undefined

一项建议是切换到1.4.1,并尝试通过.isPlayObject进行相反的测试:

代码语言:javascript
运行
复制
if (jQuery.isPlainObject($myObject))...

这在Firefox中运行得很好。但是,IE8总是返回true。

我的问题:

  1. 是我的逻辑,简单地说,我的函数是如何从hoverIntent和直接调用的?
  2. ,如果没有,是否有一种方法可以持续地测试我是否显式地将一个对象传递给函数中的变量?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-07 16:59:16

我会采取完全不同的做法。首先,让一个函数以一个jQuery对象作为参数是很奇怪的。使用jQuery方式并将您的函数转换为jQuery插件。为了在hoverIntent配置中使用,可以将函数包装在另一个小函数中,也可以使用新的(1.4) jQuery.proxy()函数。

票数 3
EN

Stack Overflow用户

发布于 2010-02-07 17:02:53

与其传递一个对象,为什么不传递一个简单的布尔值来指示调用对象的位置,例如:

代码语言:javascript
运行
复制
myFunction(asOption){
    if(asOption) {
        alert("called from hoverIntent");
    } else {
        alert("called from somewhere else");
    }
}

还是我完全搞错了重点?

票数 1
EN

Stack Overflow用户

发布于 2010-02-07 17:03:09

你让这件事变得不必要的复杂。只需对传递函数所期望的参数的回调使用包装:

代码语言:javascript
运行
复制
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,您可以跳过函数内部的检查:

代码语言:javascript
运行
复制
myFunction($myObject)
{
     $myObject.doSomething...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2217426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档