2010-01-07 2 views
3

live() 메서드를 사용하여 세 개의 이벤트를 하나의 선택기에 바인딩하려고하는데 작동하지 않는 것 같습니다.추가 행을 추가 한 후 jQuery live()를 사용하여 여러 이벤트를 모든 테이블 행에 바인딩하는 방법?

가 여기에 지금까지 무엇을, 그리고 내가 추가로 테이블 행을 추가 할 때까지 작동 :

$("tr:has(td)").live('click',function(event){ 
     //do stuff 
}).live('mouseover',function(){ 
    $(this).toggleClass('highlight'); 
}).live('mouseout',function(){ 
    $(this).toggleClass('highlight'); 
}); 

내가 추가로 테이블 행을 추가 한 후에 만 ​​클릭 이벤트가 작동합니다. 테이블 행을 추가 한 후 세 가지 이벤트가 모두 작동하도록하려면 어떻게합니까?

답변

4

예를 들어, 을 live().live().live()으로 이동하여 원하는 개체가 아닌 것을 추가하려고합니다. 이것은 jQuery가 연결을 처리하는 방법입니다. 당신이해야 할 일은

은 다음과 같습니다

var $o = $("tr:has(td)"); 
$o.live('click',function(event){ 
     //do stuff 
}); 
$o.live('mouseover',function(){ 
    $(this).toggleClass('highlight'); 
}); 
$o.live('mouseout',function(){ 
    $(this).toggleClass('highlight'); 
}); 

Here is an article on chaining

+2

그냥 단지 (선택기에 대해 직접 즉'$ ("셀렉터를 실행할 수') (', 라이브 명확히 ") .live()'). 이것이 코드가 작동하고 OP 코드가 작동하지 않는 이유입니다. (내 한계에 도달하지 못하면 +1하겠다.) - .live()를 제외하고 이벤트를 포함한 거의 모든 다른 선택자는 연결될 수있다. –

+0

나는 그것을 시도했지만 아무 것도 작동하지 않는다. 방금 코드를 붙여 넣었고 click 이벤트가 작동하지만 다른 두 이벤트는 동적으로 테이블 행을 추가 한 후에는 작동하지 않습니다. – croceldon

+0

어떻게됩니까? 오류가 있습니까? 함수가 호출되었는지 알기 위해 경고()를 표시해 보았습니까 (고장난 고등급 클래스 일 수 있음)? – marcgg

0

난 당신이 $("tr:has(td)").live() 세 번을 할 생각 - 당신이 그것을 체인 수 없습니다. 대신 훨씬 더 우아한 이벤트 위임을 사용할 수 있습니다 live()를 사용

0

:

$('table').hover(function(e) { 
    $(e.target).closest('tr').addClass('highlight'); 
}, function(e) { 
    $(e.target).closest('tr').removeClass('highlight'); 
}) 
관련 문제