2009-12-14 6 views
0

이것은 아마도 jquery의 한계를 밀고 있습니다.jQuery div를 클릭 할 때 한 번만 이벤트가 발생하는 방법

live() 이벤트를 트리거하고 싶습니다. 하지만 아마도 one() 이벤트를 사용하여 한 번만 트리거되도록하고 싶습니다.

현재 코드가 있습니다. 이것을 한 번만 호출하도록 어떻게 제한합니까?

$(".sub-content").live('click', function() { 
     var id = this.id; 
     $.get("InfoRetrieve", { theid:id }, function(data) { addContent(data, id) }); 
    }); 

답변

1

몇 가지 방법이 있습니다.

<div class="sub-content not-loaded">...</div> 

과 :

$("div.sub-content.not-loaded").live("click", function() { 
    $(this).removeClass("not-loaded"); 
    ... 
}); 

는 물론 여러분이이 다른 방법을 (가로드 된 있다고 표시하는 클래스를 추가) 할 수 첫째로 당신은 마커를 사용할 수 있습니다.

$("div.sub-content.not-loaded").live("click", function() { 
    if ($(this).hasClass("not-loaded")) { 
    $(this).removeClass("not-loaded"); 
    ... 
    } 
}); 

이 작동 : 나는이 경우 위의 live() 제대로 처리됩니다 100 %입니다.

또는 이벤트를 바인딩 해제 할 수 있습니다.

$("div.sub-content").click(load_content); 

function load_content() { 
    $(this).unbind("click", load_content); 
    ... 
} 

는 그 그러나 live() (live()으로 단지를 리 바인드 할 수 있습니다) 도와 드리겠습니다 100 % 확실하지 않다.

$(".sub-content").live('click', function() { 
    $(this).die('click'); 
    var id = this.id; 
    $.get("InfoRetrieve", { theid:id }, function(data) { addContent(data, id) }); 
}); 

내가 비록 그것을 테스트하지 :

+0

이 경우에는 작동하지 않는 것 같지만 어쨌든 뭔가 배웠습니다. 감사합니다. – Ankur

0

당신은 die 방법을 사용할 수 있습니다.

+0

클릭 이벤트가 모두 제거됩니다. 영업 담당자는 각 div가 한 번만로드되는 것을 확인하기를 원하며, 이는 꽤 똑같지는 않습니다. 첫 번째 div를 클릭하면 아무 것도 클릭 할 수없는 방식으로 모든 클릭 이벤트가 삭제됩니다. – cletus

관련 문제