2011-01-20 7 views
0

$ (document) .ready(); 동일한 페이지에서 가능합니다. 클릭 이벤트와 비슷한 것이 필요합니다.jQuery : 동일한 요소이지만 동일한 시점에 두 개의 다른 시점에서 동일한 이벤트에 대해 여러 동작 실행

상황 :

$('#element').live('click', function() { /* Do this */}); 

그것은 #element에 라이브()을 클릭 리스너가있다 : 또 다른 팀은 외부 JS 파일에이 곳을 구현했습니다. 이 코드 나 파일을 수정할 수는 없지만 같은 이벤트에서 같은 요소에 대해 추가 작업을 수행해야합니다. 따라서 #element를 클릭하면 두 가지 동작이 발생합니다. 즉, 이에 해당하는 것이 필요합니다.

$('#element').live('click', function() { /* Do this */}); 
/* Some code later... */ 
$('#element').live('click', function() { /* Add another action */}); 

두 번째 호출이 실행되지 않습니다. #element가 동적으로 추가되기 때문에 .live()가되어야합니다.

#element의 동일한 이벤트에 더 많은 작업을 추가 할 수있는 방법이 있습니까? 감사.

+0

이벤트 핸들러가 false를 반환하는 것처럼 보입니다. 그게 내 전화를 멈추니? $ ("# element"). live ('click', function() {p.log_in(); false false;}); – Stephen

답변

1

그들은 거짓을 반환하고있어, 해고되는 것을 멈추고 있습니다.

http://api.jquery.com/bind/이 핸들러에서 false를 반환 참조하면 이벤트 객체에 모두 .preventDefault()와 .stopPropagation()를 호출하는 것과 입니다.

+0

견과류 ... jQuery 문서의 인용문을 보내 주셔서 감사합니다. 다른 팀의 코드를 변경할 수는 없지만 문제를 다르게 보는 것으로 ChessWhiz의 대답을 기반으로이 문제를 해결할 수있는 또 다른 방법을 찾았습니다. 내 팀이 HTML을 제어한다는 것을 알았습니다. #element에 새 클래스 이름을 추가하고 .live()를 사용하여 대상을 지정했습니다. 그거야. – Stephen

0

기존의 live() 호출을 실제로 바인딩 해제 한 다음 자신의 코드와 함께 자신의 메서드에 포함하는 것이 더 쉽다는 것을 제안합니다. 그것은 당신이 할 수 있다고 가정하고 그렇게하는 것이 현실적입니다.

+0

그들의 호출은 별도의 라이브러리 및 네임 스페이스에 있으므로 바인딩을 해제하고 코드를 추가 할 수 없습니다. – Stephen

0

이벤트 핸들러를 바인드 할 때마다 핸들러 체인에 핸들러 체인을 설치할 때마다이 핸들러가 호출됩니다. 자 이제 바꿀 수있는 코드 외에도 자신을 묶어도 괜찮습니다.

+0

이벤트 처리기가 false를 반환하는 것처럼 보입니다. 그게 내 추가 중지합니까? $ ("# element"). live ('click', function() {p.log_in(); false false;}); – Stephen

관련 문제