0

一連のハイパーリンクを変換して、jQueryを使用して単純なGETリクエストを作成しています。thisAjax呼び出し内でへの参照を維持したいのですが、 bind//live何か他のものを使用する必要がありますか?

$(document).ready(function(){
    $(".mylink").click(function(){
        var url = $(this).attr('href');
        $.get(url,function(data){
            $(this).parent().html(data); // this is now out of scope
        });
        return false;
    });
});
4

4 に答える 4

3
$(document).ready(function(){
    $(".moderate").click(function(){
        var $this = $(this);
        var url = $this.attr('href');

        $.get(url,function(data){
            $this.parent().html(data);
        });
        return false;
    });
});

それはあなたのために働くはずです。

于 2010-01-19T12:39:20.260 に答える
1
$(document).ready(function(){
    $(".moderate").click(function(){
        var url = $(this).attr('href');
        var that = $(this);
        $.get(url,function(data){
            that.parent().html(data);
        });
        return false;
    });
});
于 2010-01-19T12:38:38.623 に答える
1

this次のように、別の変数に保存する必要があります。

$(document).ready(function(){
    $(".mylink").click(function(){
        var realThis = this;
        var url = $(this).attr('href');
        $.get(url,function(data){
            $(realThis).parent().html(data); // realThis is now in scope
        });
        return false;
    });
});

AJAXコールバックは外部メソッドの変数にアクセスできるため、この手法は正常に機能します。

後で追加された要素も含め、すべてのlive要素を処理する場合にのみ呼び出す必要があります。 .mylink

于 2010-01-19T12:39:40.770 に答える
1

スコープはjavascriptの混乱です:)

jQuery 1.4には、スコープを任意のコールバックに取り込むことができる組み込みのプロキシ関数があります。http://api.jquery.com/jQuery.proxy/を参照してください。

ただし、自分で作成するのは非常に簡単です。

var proxy = function( fn, scope ) {
    if ( typeof fn !== 'function' ) {
        return function() {};
    }
    scope = scope || this;
    return function() {
        return fn.apply( scope, Array.prototype.slice.call(arguments) );
    };
}

$(document).ready(function(){
    $(".moderate").click(function(){
        var url = $(this).attr('href');
        $.get(url, proxy(function(data) {
            $(this).parent().html(data);
        }, this));
        return false;
    });
});

スコープを変数に入れて、後でアクセスすることもできます。

$(document).ready(function(){
    $(".moderate").click(function(){
        var scope = this;
        var url = $(this).attr('href');
        $.get(url, function(data) {
            $(scope).parent().html(data);
        });
        return false;
    });
});
于 2010-01-19T12:41:04.823 に答える