2013-02-13 2 views
4

jQuery 이벤트에서 콜백으로 직접 호출 할 수있는 JavaScript 함수가 있습니다.jQuery : 함수가 jQuery 이벤트 핸들러 (콜백)로 호출되었는지 확인

후자의 경우 jQuery 이벤트 객체가 인수로 전달됩니다. 함수를 직접 호출하면 인수 (다른 종류이지만 여전히 Object)를 제공합니다.

따라서 함수를 호출하는 방법을 확인하여 (함수 본문 내에서) 어떤 종류의 인수를 처리해야하는지 알 수 있어야합니다.

간단한 방법이 있습니까?

+0

지금까지 시도한 코드를 제공 할 수 있습니까? – Neel

+0

코드에는 흥미로운 점이 전혀 없습니다. 내가 간단하게 시도한 것은 함수가 직접 호출 될 때 첫 번째 위치에는 널 값을 사용하고 두 번째 위치에는 유용한 인수를 사용한다. –

답변

11

인수를 수락 한 다음 instanceofjQuery.Event :

function yourFunction(e) { 
    if (e instanceof jQuery.Event) { 
     // ...it was an event handler call 
    } 
} 

Live Example | Source

나는 이런 종류의 일을 피하는 것이 좋습니다. 대신, 이벤트 처리기를 호출하는 방법에 따라 동작을 구분해야 할 경우 (대상 이벤트를 실제 이벤트 처리기로 사용하는 대신) 대상 호출 기능을 사용하는 것이 좋습니다. 질문에 대한 내 댓글에서

: 함수를 직접 호출 할 때, 내가 처음 위치와 두 번째 위치에 유용한 인수에 null 값을 사용 나는 단순히 시도 무엇

. 이 경우

, 그것은 심지어 쉽게 :

function yourFunction(e) { 
    if (e) { 
     // ...it was an event handler call -- or at least, 
     // a non-falsey argument of some kind was passed in 
    } 
} 

심지어 단지 인수없이 호출, 함수에 null를 통과 할 필요가 없습니다. 그렇게하면 eundefined이되며 이는 허위입니다. (이벤트 객체 jQuery가 처리기를 전달하면 결코 거짓이 아닙니다.)

+0

감사합니다. 내 답변에 도움이 될 것입니다. 그러나 나는 궁금해 : 함수를 디자인 할 때 이벤트 핸들러로 직접 첨부되지 않는다고 가정하면 매우 좋은 연습이 아닌 것 같습니다. –

+0

@GlauberRocha : 아니요,하지만 여러분이 정의한 인수로 호출 될 것이라고 기대할 수는 있습니다. 인자를 취하지 않는 것으로 정의하면 ('function foo() {...}'), 인자로 인자를 호출하는지 여부는 중요하지 않습니다 ('arguments' 객체를 보지 않는 한). 인수는 완전히 무시됩니다. –

-1

if 조건 내에 typeof() 연산자를 사용하십시오. 인수 유형이 동일하게 나오는 경우 두 경우 모두 통과하는 객체/이벤트에 고유 한 속성을 할당 한 다음 해당 속성을 다시 검사 할 수 있습니다 ...

+0

'typeof'는 두 경우 모두 –

+0

hm의 '객체'를 제공합니다. 이걸 가지고 뭔가 할 수 있니? http://stackoverflow.com/questions/14852688/creating-a-model-structure-in-backbone :) – beNerd

+0

@beNerd 나는 당신이 나의 질문과 당신의 사이의 관계를 보았다고 생각합니다 ...하지만 미안 해요. 티. 답변을받지 못했다는 사실을 제쳐두고 ... –

관련 문제