-2

このスクリプトのリストは数行あります

$("a.remove").click(function(){
    var id = $(this).attr('id')
    var user = $(this).attr('value')
    $.ajax({
        success : function(){
            var url = "includes/action.php?page=access&action=remove";
            var popupmessage = "Error";
            $.post(url, { id: id },
                function(data){
                    return true;
            });
        }
    });
});

しかし、jQueryを介して新しい行を追加すると、ページを更新するまで機能しません

$("<a class=\"remove\" href=\"#\"></a>").insertAfter('#accesstable tr:last');

それを修正する方法はありますか?

編集: 作業コード

$('a.remove').live('click', function(){
    var id = $(this).attr('id')
    var user = $(this).attr('value')
    $.ajax({
        success : function(){
            var url = "includes/action.php?page=access&action=remove";
            var popupmessage = "Error";
            $.post(url, { id: id },
                function(data){
                    return true;
            });
        }
    });
});
4

5 に答える 5

3

試す:

$(document).on('click', 'a.remove', function(){

委任されたイベントには、後でドキュメントに追加される子孫要素からのイベントを処理できるという利点があります。委任されたイベントハンドラーがアタッチされたときに存在することが保証されている要素を選択することにより、委任されたイベントを使用して、イベントハンドラーを頻繁にアタッチおよび削除する必要をなくすことができます。

http://api.jquery.com/on/#direct-and-delegated-events

于 2013-01-08T15:05:33.403 に答える
1

推測では(確実に表示される十分なコードがないため)、問題はクリックをバインドし、後でそのクリックハンドラーによってバインドされるはずの要素を追加することです。それはそのようには機能しません。でバインドすると、その時点.clickで存在するすべての一致する要素がバインドされます。作成された新しい要素は自動的にバインドされません。

作成されていない要素をバインドするには、.on代わりにセレクターを使用して親要素で使用します。

于 2013-01-08T15:09:17.757 に答える
0

新しく追加したアンカータグが、すでに宣言したものと同じクリックイベントを呼び出さない場合は、.click()関数を使用しているためです。これにより、現在ページにある一致する要素にのみクリックイベントが追加されます。

live()イベント の使用を検討する必要があります。

現在および将来、現在のセレクターに一致するすべての要素にイベントハンドラーをアタッチします。

したがって、次のようなものに変更できます。

$("a.remove").live('click', function(){ .. });

編集

Live()は非推奨になりました。on ()関数を使用する必要があります。

于 2013-01-08T15:09:56.910 に答える
0

jQueryは動的に追加されたコンテンツのリスナーを無視し、jQueryのライブを使用します

$("a[class='remove']").live('click', function(){});

編集:ライブは非推奨です。オンのソリューションを使用してください

于 2013-01-08T15:07:13.717 に答える
-1

.liveは非推奨です。使用するだけです。

$(document).on('click', 'a.remove', function(){..});
于 2013-01-08T15:35:25.580 に答える