2009-09-19 4 views
1

JQuery 이벤트는 저를 괴롭 히고 있습니다. 것은 매우 자주 자바 스크립트 (아약스 요청 등) 후 새로운 요소를 작성하는 것입니다 (버튼, divs 등). 편집 버튼을 누를 수있는 요소 목록이있어서 선택한 편집 버튼에 연결된 을 조작 할 수 있습니다.JQuery 이벤트 바인딩

누군가가 이전에 이 있었던 것과 같은 새 요소를 만들기 위해 양식을 제출하고 아약스로 제출 한 다음 을 추가하거나 앞에 추가합니다. 그런 다음 편집 버튼을 만든 후에 이 DOM에 다시로드되지 않았기 때문에 새 요소에 대한 새로운 편집 버튼이 JQuery의 이벤트 시스템에 연결되어 있지 않습니다. 동일한 자바 스크립트 파일에 이벤트가 포함되어있는 경우 편집 버튼이 작동하지만 다른 사용자가 다른 수정 버튼을 클릭하면 이벤트가 두 번 바운딩되었으므로 두 번 발생합니다. 나는 또한 .bind()를 사용했지만, 단지 만이 이전과 같은 이벤트를 두 번 바인딩한다고 생각한다. 나는 그것을 시험해 본 순간 에 기억하지 않는다. .one()을 테스트하지는 않았지만 어떤 이벤트는 두 번 이상 호출되어야하므로 사용하지 않을 것입니다.

이벤트를 처리 할 때 어떤 접근 방식을 사용했는지 묻고 싶습니다.

P. 모든 요소가 가지고있는 클래스 속성에 JQuery 이벤트를 바인딩합니다. ID를 기반으로 각 요소에 바인딩하려고하면 .bind()를 사용하기 때문에 문제가되지 않습니다. 이것을 쓰면 갑자기 .unbind()와 .bind()를 사용하여 요소를 이벤트 시스템에 연결합니다. 어떻게 생각하니? 다른 방법으로 해 주시겠습니까?

미리 감사드립니다. 크리스틴.

답변

4

하다는 느낌이 $ .fn.live :

$('a').live('click', function(e) { 
    e.preventDefault(); 
    alert('im attached even if the DOM has been updated!'); 
}); 

http://docs.jquery.com/Events/live

+0

고마워요. –

+0

live()가 모든 항목에서 작동하지 않습니다. 지원되지 않는 이벤트를 live()로 바인드하려면 운이 없으면됩니다. 이 경우 내가하는 일은 reload() 함수에서 .bind() 호출을하는 것입니다.이 함수는 편집 후에 호출합니다. 이것은 정말 잘 작동합니다. – Vince

+0

preventDefault()는 false를 반환하여 쉽게 바꿀 수 있습니다. 덧붙여서 :) –

2

귀하의 질문은 조금 일반적이다,하지만 난 당신이 찾고있는 것은 당신이 사용하는 방법을 찾고 jquery live

+0

예. jQuery.live()는 요소가 생성 될 때 새 이벤트 핸들러를 작성한다는 점을 제외하고는 .bind()와 같은 방식으로 작동합니다. –

+0

나는 단지 문서 객체의 이벤트에 대한 하나의 이벤트 핸들러를 첨부하고 이벤트 객체를 구문 분석하여 어떤 엘리먼트가 이벤트를 트리거했는지 탐지 할 수있을 것이라고 확신한다. –

+0

고마워요. –

관련 문제