2
 $(document).ready(function () {
var user = 1;
 $("a.like").on("click", function () {
            var article = $(this).attr('data-article');
            $.ajax({
                type: "POST",
                url: "WebService.asmx/Like",
                data: "{ 'user': '" + user + "', 'article': '" + article + "' }",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    if(msg.d ==  1)
                    {
                        $(".like[data-article='" + article + "']").fadeOut(700).addClass('unlike').removeClass('like').stop().text('Unlike').fadeIn(700);
                    }
                },
                failure: function (msg) {
                    alert(msg.d);
                }
            });
        });

$("a.unlike").on("click", function () {
            var article = $(this).attr('data-article');
            $.ajax({
                type: "POST",
                url: "WebService.asmx/Unlike",
                data: "{ 'user': '" + user + "', 'article': '" + article + "' }",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    if(msg.d ==  1)
                    {
                        $(".unlike[data-article='" + article + "']").fadeOut(700).addClass('like').removeClass('unlike').stop().text('Like').fadeIn(700);
                    }

                },
                failure: function (msg) {
                    alert(msg.d);
                }
            });
        });
});

正常に動作しているようなクラスのリンクをクリックすると、クラスが異なるリンクをクリックしても同じです。ただし、同じリンクを 2 回クリックしても機能しません。インターネットで検索すると、クリックの代わりにライブを使用する必要があることがわかりますが、ライブは 1.8 バージョンで廃止されました。これを複数回発火させるにはどうすればよいですか?

4

4 に答える 4

10

使用jQuery.on():

$( document ).on( 'click', 'a.like', function () {
    // Do click stuff here
} );

http://api.jquery.com/on/

on常に存在する要素にバインドする必要があります。(ドキュメントまたは一部のメイン ラッパー div)。動的要素で使用onすると機能しません。

于 2012-11-05T17:24:02.257 に答える
5

on代わりに使用したい場合は、次のliveように書く必要があります

$('#container').on('click', '.a.unlike', function () {

以来

$("a.like").on("click", function () {

bind()非推奨になる前と同じように機能しました。

あなたが私の最初の例のように3つの引数を渡す必要があるようon()に行動したい場合。live()

.on() メソッドは、jQuery オブジェクトで現在選択されている要素のセットにイベント ハンドラーをアタッチします。jQuery 1.7 以降、.on()メソッドは、イベント ハンドラーをアタッチするために必要なすべての機能を提供します。古い jQuery イベント メソッドからの変換については、.bind().delegate()、および.live()を参照してください。.on() でバインドされたイベントを削除するには、.off() を参照してください。1 回だけ実行されてから削除されるイベントをアタッチするには、.one() を参照してください。

于 2012-11-05T17:25:11.707 に答える
1
$(document).on("click","a.unlike", function () {

on の live/delegated 形式です。

http://api.jquery.com/live/

于 2012-11-11T15:00:21.900 に答える