2014-04-24 9 views
0

때때로 이벤트가 처리되는 방식에 혼란스러워합니다. 방금 처리기에 이벤트를 전달하는 방법을 궁금해했습니다.이벤트 핸들러에 이벤트 전달

다음의 예는 잘 작동합니다 : 당신의 통찰력에 대한

// this obviously wont work 
$('div#foo').on('click', fooClick); 
function fooClick(event){ 
    event.preventDefault(); 
} 

감사 :

$(document).on('click', "div#foo", function(event) { 
    event.preventDefault(); 
}); 

하지만 어떻게이 같은 이름으로 지정된 핸들러에 이벤트를 전달!

답변

1

두 번째 예제는 정확히 수행하는 방법이며 정상적으로 작동합니다.

콜백에 대한 인수를 설정하는 것은 .on()의 책임이며 패스 란 콜백 선언 방법과는 전혀 관련이 없습니다. 콜백 함수에 대한 첫 번째 인수는 콜백이 어떻게 선언 되든 상관없이 event 개체가됩니다.

그래서,이 잘 작동합니다

function fooClick(event){ 
    event.preventDefault(); 
} 

// this works just fine 
$('div#foo').on('click', fooClick); 

근무 데모 : 당신이 .on()에 두 번째 인수로 fooClick을 통과 할 때, 당신은 단지 함수를 전달하는 이해하는 것이 중요 무엇 http://jsfiddle.net/jfriend00/BWKde/

인지를 참고. .on()은 함수 참조를 호출하는 방법과 전달할 함수를 결정합니다. 특별히 그것이 div 태그의 경우에만 #foo 일치하지 않으려면 그냥 #foo하지 div#foo을 전달하는 경우


참고로, 당신의 선택자는 일반적으로 더 나은 수행합니다. id 값은 지정된 페이지에서 한 번만 사용할 수 있으므로 일반적으로이를 더 한정하지 않아도되므로 선택기 엔진에 더 많은 (불필요한) 작업이 수행됩니다. 코드가 괜찮

+0

감사합니다 . 아직도 나를 위해 일하지 않는 것 같습니다. 링크에서 preventDefault를 사용하고 두 번째 예제에서 설명한 방법을 사용하면 링크가 새 창에서 열립니다. – nevrx

+0

@nevrx - jsFiddle의 작은 데모로 축소 할 수 있습니까? 개념이 정확하므로 구현에 다른 문제가있을 수 있습니다. – jfriend00

+0

@nevrx - 컨셉이 잘 작동한다는 것을 보여주기 위해 데모를 추가했습니다 : http://jsfiddle.net/jfriend00/BWKde/ – jfriend00

0

,

http://jsfiddle.net/9266U/에서 확인 및 더에서 https://api.jquery.com/on/

$('div#foo').on('click', fooClick); 
function fooClick(e){ 
    alert("it work, nevrx"); 
    e.preventDefault(); 
} 
+0

감사합니다. 나는 오직 하나의 답을 올 바르게 체크 할 수 있으며 네 것이 또한 그렇다. – nevrx

0

자바 스크립트가 동기 읽기, 같이 넣어보십시오 : 귀하의 빠른 회신

function fooClick(event){ 
    event.preventDefault(); 
} 
$('div#foo').on('click', fooClick); 
관련 문제