2010-01-21 3 views
3

ajax를 통해로드되는 요소를 만들려면 mootools 1.11에서 같은 클래스와 관련된 이벤트를 채택해야합니까? $('.button')live는, 이러한 이벤트가 자동으로 바인딩 할 사용하여 이벤트 바인딩이있는 경우mootools에서 jQuery 라이브 바인딩 이벤트를 구현하는 방법은 무엇입니까?

는 지금까지 내가 아는 한, jQquery에, 당신의 아약스 응답은 <div class='button'>,
과 같이 구성합니다.

MooTools 1.11에서 가능합니까?

+0

은, 문법을 정리 live', 자바 스크립트 태그 – artlung

+0

안녕 잠금 장치를 추가'에 대한 참조를 추가했다. 1.11에서이 작업을 할 수 있었습니까? – denormalizer

+0

늦게 답변 해 주셔서 감사합니다. 어쨌든, 그래, 나는 그것이 도메인/호스팅이 이미 만료 되었기 때문에 나는 그것을 사용하는 사이트에 대한 링크를 제공 할 수는 없지만, 내가 그것을 관리 할 수 ​​있었다. 나는 코드 스 니펫 (snippet)을 제공 할 수 있지만, 1.11에 쓰여진 코드를 제외하고는 받아 들인 대답과 거의 비슷하다. 여기에 링크가 있습니다 : http://pastebin.com/HZ4cDLU6 – lock

답변

7

아마도 이와 같은 것이 당신이 찾고있는 것을 할 수 있을까요? 1.11에서 작동하는지 확실하지 않지만.

Element.implement({ 
    addLiveEvent: function(event, selector, fn){ 
     this.addEvent(event, function(e){ 
      var t = $(e.target); 

      if (!t.match(selector)) return false; 
       fn.apply(t, [e]); 
     }.bindWithEvent(this, selector, fn)); 
    } 
}); 

$(document.body).addLiveEvent('click', 'a', function(e){ alert('This is a live event'); }); 
+0

이 코드에서는 false를 반환합니다. 선택기와 일치하지 않는 경우 시작 이벤트 (예 : 클릭)를 차단합니다. 이 수정 제안 :'if (t.match (selector)) \t \t fn.apply (t, [e]); 그러나 아무 효과가없는 추가 이벤트가 여전히 불필요하게 요소에 바인딩됩니다. –

+4

이것을 사용하지 마십시오. http://mootools.net/docs/core/Element/Element.Delegation –

+0

@DimitarChristoff 질문을 읽었습니까? v1.4.2 문서에 링크했습니다. – anomareh

1

anomareh가 올바른 경로에 있습니다.

또한 이벤트 대상의 조상 요소를 확인해야합니다.

일부 이벤트는 거품이 발생하지 않기 때문에 모든 이벤트와 함께 작동하는지 확신 할 수 없습니다. Mootools가 어떻게 처리하는지 잘 모르겠습니다.

+0

나는 document.body가 전체 문서라고 생각 하나? –

+0

사실이지만 anomareh의 코드는 이벤트 대상이 선택기와 일치하는지 만 확인하기 때문에 jQuery의'live()'는 이벤트 대상의 조상을 검사하기 때문에 true이지만 연관성이 없습니다. –

1

이것은 매우 멋진 아이디어입니다. jQuery .live()도 비슷한 방식으로 작동하지만 버블 링에도 문제가 있습니다. 일부 부모가이 이벤트에 대해 stopPropagation()을 첨부 한 경우 아무 일도 발생하지 않습니다.

내가 이상적인 솔루션은 사용자 정의 이벤트를 구축 생각, 여기 니콜라스 Zakas에 의해 작성된 사용자 정의 이벤트에 대한 아주 좋은 게시물입니다 :

http://www.nczonline.net/blog/2010/03/09/custom-events-in-javascript/

는 그러나이 예는 이벤트가 아직 구현 버블이 없습니다. 예방을 위해 대체 된 버블 링이 문제를 해결해야합니다.

1

이 방법을 사용할 수 있습니다

$(document.body).addEvent('click:relay(.filterButton)', function(){ 
// do something 
}); 
관련 문제