jQuery 1.9 .live ()는 함수가 아니다


242

최근 jQuery를 1.8에서 2.1로 업데이트했습니다. 나는 갑자기 .live()작동 이 멈추는 것을 발견했다 .
오류가 발생 TypeError: $(...).live is not a function합니다.

대신 사용할 수있는 방법이 .live()있습니까?

답변:


509

jQuery .live()는 버전 1.9부터 제거되었습니다.

즉, 1.8 이전 버전에서 업그레이드하는 경우 아래 마이그레이션 가이드를 따르지 않으면 문제가 발생합니다. 당신은 단순히 대체 안 .live().on()!


검색을 시작하기 전에 읽고 교체하십시오.

들어 빠른 / 핫픽스 라이브 사이트에 없는 단지 키워드 교체 live로를 on,
매개 변수가 다르다 !

.live(events, function)

에 매핑해야합니다 :

.on(eventType, selector, function)

(자식) 선택기는 매우 중요합니다! 어떤 이유로 든 이것을 사용할 필요가 없으면로 설정하십시오 null.


마이그레이션 예 1 :

전에:

$('#mainmenu a').live('click', function)

그런 다음 자식 요소 ( a)를 .on()선택기 로 이동합니다 .

$('#mainmenu').on('click', 'a', function)

마이그레이션 예 2 :

전에:

$('.myButton').live('click', function)

그런 다음 요소 ( .myButton)를 .on()선택기 로 이동하고 가장 가까운 상위 요소 (바람직하게는 ID가있는)를 찾습니다.

$('#parentElement').on('click', '.myButton', function)

부모로서 무엇을 넣을지 모르는 경우 body항상 작동합니다.

$('body').on('click', '.myButton', function)

또한보십시오:


56

다음 JavaScript 코드를 포함시켜 코드 리팩토링을 피할 수 있습니다

jQuery.fn.extend({
    live: function (event, callback) {
       if (this.selector) {
            jQuery(document).on(event, this.selector, callback);
        }
        return this;
    }
});

3
return this;연쇄 능력을 유지하기 위해 함수의 끝에 a 를 포함해야합니다
Guerilla

이것을 사용하면 앞으로 문제가 발생합니까?
이슬람 Elshobokshy

15

jQuery API 문서는 live()버전 1.7에서 사용되지 않으며 버전 1.9에서 제거 된 것으로 표시됩니다. link) .

더 이상 사용되지 않는 버전 : 1.7, 제거 된 버전 : 1.9

또한 다음과 같이 말합니다.

jQuery 1.7부터 .live () 메소드는 더 이상 사용되지 않습니다. 사용 ) (CSTE 연구진은 이벤트 핸들러를 첨부 할 수 있습니다. 이전 버전의 jQuery 사용자는 .live ()보다 .delegate () 를 사용해야 합니다.


앞으로 호환되는 버전을 언급 해 주셔서 감사합니다. .delegate ()
Edward Olamisan

13

.live()jQuery 에 대한 포워드 포트 > = 1.9 JS 의존성을 리팩토링하지 않도록 .live() 최적화 된 DOM 선택기 컨텍스트 사용

/** 
 * Forward port jQuery.live()
 * Wrapper for newer jQuery.on()
 * Uses optimized selector context 
 * Only add if live() not already existing.
*/
if (typeof jQuery.fn.live == 'undefined' || !(jQuery.isFunction(jQuery.fn.live))) {
  jQuery.fn.extend({
      live: function (event, callback) {
         if (this.selector) {
              jQuery(document).on(event, this.selector, callback);
          }
      }
  });
}

이것은 내 경우에는 훌륭하게 작동했습니다 : jQuery 1.11.2에서 필수적으로 작동했습니다. 감사합니다!
vcoppolecchia

5

.live ()는 더 이상 사용되지 않으며 이제 jQuery 1.9에서 제거되었습니다. .on ()



5

코드를 변경할 필요가없는 매우 간단한 수정, jquery 마이그레이션 스크립트 추가, 여기 다운로드 https://github.com/jquery/jquery-migrate/

더 이상 사용되지 않지만 "live", "browser"등과 같은 기능이 필요한 jquery를 제공합니다.


2

필요하지 않은 경우 .on () 구문을 사용하지 않는 경향이 있습니다. 예를 들어 다음과 같이 쉽게 마이그레이션 할 수 있습니다.

낡은:

$('.myButton').live('click', function);

새로운:

$('.myButton').click(function)

유효한 이벤트 처리기 목록은 다음과 같습니다. https://api.jquery.com/category/forms/


3
동적으로로드 된 내용 (예 : 페이지가로드 된 후 추가 된 요소)에만 .on () 구문이 필요하다고 생각합니다.
T30

1

Ruby on Rails의 jQuery gem jquery-rails을 사용하는 경우 어떤 이유로 든 레거시 코드를 리팩터링 할 수없는 경우, 여전히 지원하는 마지막 버전 2.1.3은 다음 구문을 사용하여 잠글 수 있습니다 Gemfile.

gem 'jquery-rails', '~> 2.1', '= 2.1.3'

다음 명령을 사용하여 업데이트 할 수 있습니다.

bundle update jquery-rails

비슷한 문제에 직면 한 다른 사람들을 돕기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.