2010-02-07 5 views
4

설정의 일부로 함수를 호출하는 hoverIntent를 사용하고 있습니다. 나는이가 (? 올바른) '기능을 참조'라고 생각한다함수가 jQuery 콜백으로 호출되거나 직접 호출되는 것을 어떻게 감지 할 수 있습니까?

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

그러나, 나는이 시간에 말했다 기능을 다시 사용하고 명시 적으로 jQuery를 객체를 전달하고 싶습니다. 그래서 저는 그것을 함수에 추가했습니다.

이제 hoverIntent에 의해 함수가 참조되거나 명시 적으로 호출되는 시점을 파악해야합니다. 내 생각에 $ (특정)에 특정 DOM 요소가 포함되어 있는지 확인해 보았습니다.

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

    $myObject.doSomething... 

} 

하지만 문제가 있습니다. hoverIntent를 통해 호출

: 나는 모두 $ (이) 및 $ 로그 아웃 경우 myObject에 이러한 결과입니다 명시 적으로

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

내가 $(this).is('li')을 테스트 할 수있는 객체에게 전달을 통해 호출

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

첫 번째 시나리오에서는 사실입니다. 내가 테스트를 수행 할 때와 같이

내가 두 번째로,하지만, 파이어 폭스는 그것을 좋아하지 않습니다 수 없습니다

g.nodeName is undefined 

한 가지 제안은 1.4.1로 전환 및 테스트하려고했다 반대편에 대한 .isPlayObject :

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

이것은 Firefox에서 잘 작동합니다. 그러나 IE8은 항상 true를 반환합니다.

내 질문 : 내 기능이 hoverIntent에서 대 직접 호출되는 방법

  1. 내 논리의 관점에서 단순히 해제 방법인가?

  2. 만약 그렇다면 함수에서 변수에 객체를 명시 적으로 전달했는지 지속적으로 테스트 할 수있는 방법이 있습니까?

답변

3

나는 이것을 완전히 다르게 할 것이다. 첫째, 함수가 jQuery 객체를 매개 변수로 사용하는 것은 이상합니다. jQuery 방식으로 이동하여 jQuery 플러그인으로 기능을 만드십시오. hoverIntent 구성에서 사용하려면 다른 작은 함수로 함수를 래핑하거나 새로운 (1.4) jQuery.proxy() 함수로 함수를 래핑 할 수 있습니다.

+1

플러그인은 나의 궁극적 인 목표 일 것이다. 하지만 이번 릴리스에는 시간이 없을 것 같습니다. 별개의 기능은 의미가 있습니다 (그리고 간단하게, 뒤늦은 견해에서!) –

1

대신 객체를 전달하는, 왜 그것에서 호출 된 경우, 예를 들어, 표시 할 수있는 간단한 부울 통과하지 :

myFunction(asOption){ 
    if(asOption) { 
     alert("called from hoverIntent"); 
    } else { 
     alert("called from somewhere else"); 
    } 
} 

또는 나는 완전히 지점을 놓친 거지?

+0

유효한 해결책! 감사. –

1

이렇게하면 불필요하게 복잡해질 수 있습니다.그냥 함수가 기대하는 인수를 전달하는 콜백 래퍼를 사용

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 
}; 

은 ... 당신은 모두 당신의 함수 내에서 수표를 건너 뛸 수 있습니다 :

myFunction($myObject) 
{ 
    $myObject.doSomething... 
} 
+0

나는 펀치를 때리면 답을 얻지 못할 것이다. 간단히 말해서 구성 자체에 기능이 추가 된 것을 좋아한다. –

관련 문제