web-dev-qa-db-ja.com

jQuery 1.9 .live()は関数ではありません

私は最近jQueryを1.8から2.1に更新しました。私は突然.live()が動かなくなったことを発見しました。
エラーTypeError: $(...).live is not a functionが発生しました。

.live()の代わりに使用できる方法はありますか?

221
ngplayground

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)

また見なさい:

474
Samuel Liew

次のJavaScriptコードを含めることで、コードのリファクタリングを回避できます。

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

JQuery APIのドキュメントには、live()がバージョン1.7では非推奨、バージョン1.9では削除されていると記載されています: link

バージョン廃止予定:1.7、削除:1.9

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

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

14
Sirko

JQuery> = 1.9用の.live()のフォワードポート.live()へのJS依存関係のリファクタリングを回避最適化された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);
          }
      }
  });
}
14
David Thomas

コードを変更する必要がない非常に単純な修正で、jquery移行スクリプトを追加するだけです。ここからダウンロードしてください https://github.com/jquery/jquery-migrate/

これは廃止予定だが "live"、 "browser"などの必要な機能を提供します。

5
Tofeeq

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

5
matino

.live()は推奨されなくなり、jQuery 1.9から削除されました。 .on() を使用してください。

4
koopajah

必要でなければ、私は.on()構文を使用しない傾向があります。たとえば、次のように簡単に移行できます。

古い:

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

新しい:

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

以下は有効なイベントハンドラの一覧です。 https://api.jquery.com/category/forms/

2
Gerfried

もしあなたが偶然Ruby on RailsのjQuery gem jquery-Railsを使っていて、あなたがあなたのレガシーコードをリファクタリングすることができないならば、まだサポートする最後のバージョンは2.1.3であり、あなたはGemfile

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

その後、次のコマンドを使って更新できます。

bundle update jquery-Rails

他の人が同じような問題に直面しているのを助けてくれることを願っています。

1
fagiani