문제

나는 약간있다 <tr> 내 페이지의 요소 a click() 이벤트는 각각 내부에 앉아있는 이미지에 첨부 된 이벤트입니다. 이 코드를 사용합니다

$(this).clone(true).appendTo("table#foo");

다음을 수행하려면 :

  • 그것들을 복사하십시오 <tr>다른 테이블에 s
  • 내부의 이미지에 대한 클릭 이벤트를 보존하십시오 <tr>s ( true 논쟁)

그 모든 것이 잘 작동합니다. 이제 나는 추가했다 jQuery 듣기 그것들에게 이벤트 <tr>s, 사용자가 정확하게 목표를 조준 할 필요가 없도록 : <tr> 클릭을 이미지로 전달할 수 있습니다.

다음과 같이 코딩됩니다.

$('tr.record').listen('click','td',function(){
  $(this).parent().find("img.clickable").click();
});

Listen () 이벤트는 원래 항목에서 잘 작동하지만 복제 된 항목에서 Listen () 이벤트가 실패합니다. 이미지의 클릭 이벤트는 여전히 잘 작동합니다.

Firebug가 나에게 말하는 것은 다음과 같습니다.

m(this, e.type) is undefined

... 그리고 그것은 jquery.listen-1.0.3-min.js의 9 행을 참조합니다.

복제 된 요소에서 Listen () 이벤트를 어떻게 만들 수 있습니까?

업데이트

기본적으로 jQuery는 복제 된 요소에 이벤트를 복사하지 않지만 이 플러그인 그렇게하도록 만들어졌습니다.

한편, Listen () 플러그인의 저자는 다른 전략을 제안했습니다. 아래의 대답을 참조하십시오.

도움이 되었습니까?

해결책

Listen () 플러그인의 제작자 인 Ariel Flesler는 이메일을 통해이 조언을주었습니다.

"이것은 다른 방식으로 해결 될 수 있다고 생각합니다. 듣기 (및 이벤트 대표단)라는 아이디어는 실제로 새로운 요소에 대한 모든 이벤트를 복사하는 것을 피하는 것입니다."

"당신은 단순히 할 수 있습니다 :"

$('table#foo').listen('click','td',function(){
 $(this).parent().find("img.clickable").click();
});

"또는:"

$.listen('click','td',function(){
 $(this).parent().find("img.clickable").click();
});

"첫 번째 예제는 테이블을 리스너로 사용합니다. 두 번째 예에서는<html> 태그가 사용됩니다. 따라서 새로운 TD/TR/테이블을 추가하더라도 상관 없습니다. 여전히 작동합니다. "

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top