私は最近jQueryを1.8から2.1に更新しました。私は突然.live()
が動かなくなったことを発見しました。
エラーTypeError: $(...).live is not a function
が発生しました。
.live()
の代わりに使用できる方法はありますか?
.live()
はバージョン1.9以降で削除されました。つまり、バージョン1.8以前からアップグレードする場合は、以下の移行ガイドに従わないと作業が中断されることに気付くでしょう。単に.live()
を.on()
に置き換えてはいけません。
ライブサイトでのクイック/ホットフィックスの場合、 しない キーワードlive
をon
に置き換えるだけです。
パラメーターが異なるため !
.live(events, function)
にマップする必要があります。
.on(eventType, selector, function)
(子)セレクタは非常に重要です。何らかの理由でこれを使用する必要がない場合は、null
に設定してください。
前:
$('#mainmenu a').live('click', function)
その後、子要素(a
)を.on()
セレクタに移動します。
$('#mainmenu').on('click', 'a', function)
前:
$('.myButton').live('click', function)
その後、要素(.myButton
)を.on()
セレクターに移動し、最も近い親要素(できればID付き)を見つけます。
$('#parentElement').on('click', '.myButton', function)
何を親にするべきかわからない場合は、body
が常に機能します。
$('body').on('click', '.myButton', function)
次のJavaScriptコードを含めることで、コードのリファクタリングを回避できます。
jQuery.fn.extend({
live: function (event, callback) {
if (this.selector) {
jQuery(document).on(event, this.selector, callback);
}
return this;
}
});
JQuery APIのドキュメントには、live()
がバージョン1.7では非推奨、バージョン1.9では削除されていると記載されています: link 。
バージョン廃止予定:1.7、削除:1.9
さらにそれは述べています:
JQuery 1.7以降、.live()メソッドは推奨されなくなりました。イベントハンドラを添付するには .on() を使用します。古いバージョンのjQueryのユーザーは、.live()よりも .delegate() を使用する必要があります。
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);
}
}
});
}
コードを変更する必要がない非常に単純な修正で、jquery移行スクリプトを追加するだけです。ここからダウンロードしてください https://github.com/jquery/jquery-migrate/
これは廃止予定だが "live"、 "browser"などの必要な機能を提供します。
.liveは1.9で削除されました。アップグレードガイドを見てください: http://jquery.com/upgrade-guide/1.9/#live-removed
.live()は推奨されなくなり、jQuery 1.9から削除されました。 .on() を使用してください。
必要でなければ、私は.on()構文を使用しない傾向があります。たとえば、次のように簡単に移行できます。
古い:
$('.myButton').live('click', function);
新しい:
$('.myButton').click(function)
以下は有効なイベントハンドラの一覧です。 https://api.jquery.com/category/forms/
もしあなたが偶然Ruby on RailsのjQuery gem jquery-Rails
を使っていて、あなたがあなたのレガシーコードをリファクタリングすることができないならば、まだサポートする最後のバージョンは2.1.3
であり、あなたはGemfile
:
gem 'jquery-Rails', '~> 2.1', '= 2.1.3'
その後、次のコマンドを使って更新できます。
bundle update jquery-Rails
他の人が同じような問題に直面しているのを助けてくれることを願っています。