2013-01-23 8 views
8

私のWebフレームワークは、私のjQueryスクリプトを最新のバージョン、1.9に自動的に更新しました。「live」をjQuery 1.8.3からjQuery 1.9に置き換えるにはどうすればいいですか?

今、すべて私:

$(".myclass").live("click", function() {... 

はもう動作しません。私は主に私のページにhtmlを埋め込んだいくつかのAjaxでそれを使用しました。

最後のバージョンでこの機能を置き換える方法を知っています。友人は代わりに "on"を使用するように指示しましたが、 "on"は同じ要素に固定されています。

説明この例(ajaxなし)では、「+」アイコンを使用して「ul liリスト」を表示します。

$(".closed").live('click', function(){ 
    $("#ul_list_"+$(this).attr('id')).addClass("displayed").removeClass("hidden").show(); 
    $(this).addClass("openned").removeClass('closed'); 
    $(this).html('<i class="icon-minus"></i>'); 
}); 

$(".openned").live('click', function(){ 
    $("#ul_list_"+$(this).attr('id')).addClass("hidden").removeClass("displayed").hide(); 
    $(this).addClass("closed").removeClass('openned'); 
    $(this).html('<i class="icon-plus"></i>'); 
}); 

(私は私のリストを開いたり閉じたりするためにクラスを使用していました。そして、訪問者がJSが有効になっていない場合は、何も隠していない、すべての。私はスクリプトが最も今までに最適化されていないことを知っているが、それは働いていました折りたたまれたリストが開いている)

注:

  • 私はhttps://github.com/jquery/jquery-migrateを試みたが、私は持っている唯一のメッセージがある「JQMIGRATE:jQuery.fn.liveは、()は推奨されません」ではなく、修正する方法それ。
+0

あなたは 'バインド'を試しましたか? –

+0

確かに、私は1.8から1.9まで検索しました。あるいは、1.7から気づかずにちょうど "jquery 1.9 live"を検索しました!ありがとうございました! – Polopollo

+0

[移行の例](http://stackoverflow.com/a/14354091/584192)を参照してください。 –

答えて

25

docsは、既に実施例を提供する:その後継の観点.live()メソッドを書き換え

は簡単 あります。だから、

$(selector).live(events, data, handler); // jQuery 1.3+ 
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ 
$(document).on(events, selector, data, handler); // jQuery 1.7+ 

$(document).on("click", ".closed", function() { ... })これらはすべて 3つのイベントの取り付け方法と同等の通話のためのテンプレートです。

+0

セレクタargがどのように機能するかについては、docsにも本当に良い説明があります:セレクタが提供されると、イベントハンドラは委譲されたと呼ばれます。 jQueryは、イベントターゲットからハンドラがアタッチされている要素(つまり最も内側の要素から最も外側の要素)までイベントをバブルし、そのパスに沿ってセレクタに一致する要素のハンドラを実行します。" –

+0

確かに、私は新しい" on "ドキュメントの例を読んでいました..." live "ドキュメントについては考えていませんでした...ありがとうございました – Polopollo

+0

.onは.liveのようには動作しません。 .liveは非常に便利でした。 – sam360

1

liveの代わりにonを使用する必要があります。ライブのバージョン非推奨されているため、1.7

+1

これは正しくありません。 $( "。closed")には、このコードの実行時に一致した要素だけが含まれ、後で閉じられたとマークされる要素は含まれません。ライブのポイントは、クエリが「生きている」ということでした。 –

7

あなたは委任ハンドラでonを使用する必要があります:あなたは、ページの読み込みに使用可能です.closedに最も近い親要素に#parentを置き換える必要があり

$('#parent').on('click', '.closed', function() { 
    // your code... 
}); 

注 - .closedがに追加された通常の要素。

関連する問題