最近、jQueryを1.8から2.1に更新しました。私は突然.live()
停止が機能しなくなったことを発見しました。
エラーが発生しますTypeError: $(...).live is not a function
。
代わりに使用できる方法はあります.live()
か?
最近、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で削除されたリンクが記載されています。
非推奨バージョン:1.7、削除:1.9
さらにそれは述べています:
jQuery 1.7以降、.live()メソッドは非推奨になりました。.on()を使用して、イベントハンドラーをアタッチします。古いバージョンのjQueryのユーザーは、.live()よりも.delegate()を使用する必要があります。
.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移行スクリプトを追加するだけです。ここからダウンロードして ください。https://github.com/jquery/jquery-migrate/
jqueryは非推奨ですが、「ライブ」、「ブラウザ」などの必要な機能を提供します
必要がない場合、私は.on()構文を使用しない傾向があります。たとえば、次のように簡単に移行できます。
古い:
$('.myButton').live('click', function);
新着:
$('.myButton').click(function)
有効なイベントハンドラーのリストを次に示します。https://api.jquery.com/category/forms/
return this;
連鎖機能を維持するために、関数の最後にa を含める必要があります