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()


検索と置換を開始する前に読んでください:

以下のために迅速な/ホットフィックスライブサイトで、していないだけで、キーワードを置き換えるliveon
通りのパラメータが異なっています

.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 を含める必要があります
ゲリラ

これを使用すると、将来的に問題が発生しますか?
イスラムElshobokshy

15

jQuery APIのドキュメントにはlive()、バージョン1.7で非推奨となり、バージョン1.9で削除されたリンクが記載されています。

非推奨バージョン:1.7、削除:1.9

さらにそれは述べています:

jQuery 1.7以降、.live()メソッドは非推奨になりました。.on()を使用して、イベントハンドラーをアタッチします。古いバージョンのjQueryのユーザーは、.live()よりも.delegate()を使用する必要があります。


上位互換バージョンについて言及していただきありがとうございます:.delegate()
Edward Olamisan '20 / 02/20

13

.live()jQuery> = 1.9の転送ポートは、.live() 最適化されたDOMセレクターコンテキストの使用に対するJSの依存関係のリファクタリングを回避します

/** 
 * 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 2017


5

.liveは1.9で削除されました。アップグレードガイドを参照してください:http ://jquery.com/upgrade-guide/1.9/#live-removed



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.