2009-08-06 2 views
1

두 번째 함수를 onClick 이벤트에 바인드하려면 아래의 첫 번째 함수를 호출해야합니다.jQuery 이벤트를 발생시키는 바인딩 이벤트

이상한 점은 첫 번째 함수를 호출하면 두 번째 함수가 실행된다는 것입니다.

첫 번째 함수의 LinkName 매개 변수는 테이블 td 요소의 이름이며 아마도 관련이 없습니다.

function EnableExpand(LinkName, i) { 
    $(LinkName).addClass("link-text"); 
    $(LinkName).bind("onclick", ExpandFrame(LinkName, i)); 
} 

function ExpandFrame(lName, i) { 
    $("#mapFrame" + i).attr({ height: 500, width: 800 }); 
} 

답변

4

.bind()의 두 번째 인수는 함수 여야하지만 문제는 함수를 호출하는 것입니다. JQuery는 함수 호출을 평가하고 결과를 click 이벤트에 바인딩하려고 시도합니다.

제안 된대로 익명 함수로 함수 호출을 래핑하면 javascript 엔진이 래퍼 함수를 ​​이벤트에 바인딩하고 내부 함수를 평가하지 않습니다.

다음을 사용하면 위의 코드와 동일하다는 것을 알면 도움이 될 수 있습니다.

$(LinkName).click(function() { ExpandFrame(LinkName, i) }()); 
+0

그 익명의 기능을 사랑해 주셔서 감사합니다 ... – GilShalit

+0

+1 대단한 설명! –

4

클릭 이벤트가 발생할 때 호출 될 함수를 전달해야합니다. 그 방법으로, 당신은 함수를 즉시 호출하고, JQuery가 그 함수로부터 반환 된 값을 호출하도록 알려줍니다.

$(LinkName).bind("click", function() { ExpandFrame(LinkName, i); }); 
+0

정확하지만 이유를 설명하는 것이 좋습니다. ;) – Joel

+0

그래, 왜? 신경 쓰지 마라, 고마워! – GilShalit

2

바인딩이 필요하지 않습니다. .click이 수행합니다.

관련 문제