2013-01-23 3 views
8

내 웹 프레임 워크가 자동으로 내 jQuery 스크립트를 최신 버전 인 1.9로 업데이트했습니다."live"를 jQuery 1.8.3에서 jQuery 1.9로 바꾸는 방법은 무엇입니까?

이제 모든 내 :

$(".myclass").live("click", function() {... 

더 이상 작동하지 않습니다. 나는 주로 내 페이지에서 HTML을 채운 아약스와 함께 사용했다.

마지막 버전에서이 functionnality를 바꾸는 방법을 알고 있습니다. 친구가 대신 "on"을 사용하라고 말했지만 "on"은 같은 요소에 고정되어 있습니다.

설명이 예제 (아약스 없음)에서 "+"아이콘을 사용하여 "ul li 목록"을 표시합니다.

$(".closed").live('click', function(){ 
    $("#ul_list_"+$(this).attr('id')).addClass("displayed").removeClass("hidden").show(); 
    $(this).addClass("openned").removeClass('closed'); 
    $(this).html('<i class="icon-minus"></i>'); 
}); 

$(".openned").live('click', function(){ 
    $("#ul_list_"+$(this).attr('id')).addClass("hidden").removeClass("displayed").hide(); 
    $(this).addClass("closed").removeClass('openned'); 
    $(this).html('<i class="icon-plus"></i>'); 
}); 

(I 스크립트가 가장 적 최적화되지 않은 것을 알고 있지만,이 일이. 나는 열거 나 내 목록을 닫 클래스를 사용했다. 그리고 방문자가 JS를 사용할 수없는 경우, 아무것도, 모든 숨겨진 없다 해결하지 않는 방법, "jQuery.fn.live()는 지원되지 않습니다 JQMIGRATE는"

+0

'바인드'를 시도 했습니까? –

+0

사실, 1.8에서 1.9까지 검색했거나 1.7에서 나온 것만 알지 못하고 "jquery 1.9 live"를 검색했습니다! 고맙습니다! – Polopollo

+0

[Migration Examples] (http://stackoverflow.com/a/14354091/584192)를 참조하십시오. –

답변

25

docs 이미 예 제공 : 그 후속의 측면에서 .live() 메소드를 다시 쓰기

하는 것은 간단 이다; 그래서

$(selector).live(events, data, handler); // jQuery 1.3+ 
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ 
$(document).on(events, selector, data, handler); // jQuery 1.7+ 

: $(document).on("click", ".closed", function() { ... })이 모든 세 가지 이벤트 부착 방법에 대한 해당 통화에 대한 템플릿입니다.

+0

또한 선택기 arg가 어떻게 작동하는지에 대한 설명이 정말 있습니다. "선택기가 제공되면 이벤트 핸들러는 위임 된 것으로 간주됩니다. 이벤트는 바인딩 된 요소에서 직접 발생하지만 핸들러는 호출되지 않습니다. jQuery는 이벤트 대상에서 이벤트 처리기가 연결된 요소 (즉, 가장 안쪽의 요소에서 가장 안쪽에있는 요소)까지 이벤트를 버블 링하고 해당 경로를 따라 선택기와 일치하는 요소의 핸들러를 실행합니다." –

+0

사실, 새로운"on "문서의 예제를 읽었습니다 ..."live "설명서에 대해 생각하지 않았습니다 ... 감사합니다. – Polopollo

+0

.on은 .live와 작동하지 않습니다. Jquery는 생각합니다. .live는 매우 편리했습니다. – sam360

1

live 대신 on을 사용해야합니다. 라이브는 버전에 사용되지 않기 때문에 1.7

+1

이것은 옳지 않습니다. $ (". closed")에는이 코드가 실행될 때 일치하는 요소 만 포함되며 나중에 닫힌 것으로 표시된 요소는 포함되지 않습니다. 살아있는 시점은 쿼리가 "라이브"였습니다. –

7

당신은 위임 된 핸들러 on를 사용해야합니다 : 당신은 페이지로드에 사용할 수있는 .closed에 가장 가까운 부모 요소 #parent를 교체해야

$('#parent').on('click', '.closed', function() { 
    // your code... 
}); 

주 - .closed이 추가되었다 보통 요소를.