0

jQuery Ajaxを介して大量のコンテンツをロードしていますが、このロードされたコンテンツ内のimgsrc属性を変更したいと思います。

私が使用したAjaxがロードされたコンテンツをターゲットにするために、使用.clickは明らかに機能していません.on

$("#user_list").on('click','.block_user', function(e) {
    e.preventDefault();
    $(this).attr("src", "path_to_img_and_name.png");
});

これは問題なく機能します。画像は適切に置き換えられます。この変更を新しいjqueryajax呼び出し内に置くと、問題が発生します。

$("#user_list").on('click','.block_user', function(e) {
    e.preventDefault();

    var bstatus=$(this).attr("bstatus"),
    user_id=$(this).attr("user_id");

    $.ajax({
        url: 'main/change_user_status',
        data: {
            bstatus: bstatus,
            user_id: user_id
        },
        type:'POST',
        dataType: 'json',
        success: function(output){
            $(this).attr("src", "images/"+output+"_block_user.png");
            $(this).attr("bstatus", output);
        }
    });
});

これはまったく機能していません。

  • AJAX呼び出しは正常に回っています。
  • スコープは正しいので、私のimgへのパスも正しいです。
  • これは、クリック関数にAJAX呼び出しがある場合にのみ発生します

元のコンテンツが何らかの形でリロードされているようですが、誰か手がかりがありますか?

4

2 に答える 2

0

コールバック内の値を決定するcontext属性を使用します。$.ajax()thissuccess

$.ajax({
    url: 'main/change_user_status',
    context: this, // here 'this' refers to the #user_list that was clicked
    ...
    success: function(output) {
        // here 'this' refers to what we set as 'context'
        $(this).attr("src", "images/"+output+"_block_user.png");
        $(this).attr("bstatus", output);
    }
});

http://api.jquery.com/jQuery.ajax/-少し下にスクロールして、context

于 2013-01-31T15:41:34.670 に答える