0

これは、ajax呼び出しを行うために使用しているコードです

対象の要素にアクセスする方法があるかどうか知りたいです。クリックのイベント ハンドラーの外部で関数ハンドラーを定義しているため、宣言された要素ターゲットが機能しない可能性があります。

ターゲットへのアクセス方法

function handleFavorite(data) {
    if (data.status) {
        var notification = noty({
            text: "Successfully added to favorite",
            type: "success"
        });
    } else {
        var notification = noty({
            text: data.error,
            type: "error"
        });

    }
    target.toggleClass("btn-danger").toggleClass("add").toggleClass("delete");
}

function toggleFavorite() {
    var href = $(this).attr("href");
    var target = $(this);

    $.get(href, handleFavorite, "json");
    return false;
}

$(".favorite").click(toggleFavorite);   

これについてもう少し考えた後、これが最善の方法だと思います:要素をパラメーターとして受け入れる関数によってハンドラー関数を返すには:

function createHandler($element){
    var target=$element;
    return function(data){
        if (data.status) {
          var notification = noty({
             text: "Successfully added to favorite",
             type: "success"
         });
         } else {
            var notification = noty({
            text: data.error,
            type: "error"
          });

     } 
    target.toggleClass("btn-danger").toggleClass("add").toggleClass("delete");
 }

}
//And in the ajax call
function toggleFavorite() {
    var href = $(this).attr("href");
    var target = $(this);

    $.get(href, createHandler($(this)), "json");
    return false;
}

$(".favorite").click(toggleFavorite);   
4

1 に答える 1

2

それを解決する方法は、変数をパラメーターとして渡すことだと思います

function handleFavorite(target, data) {
    if (data.status) {
        var notification = noty({
            text: "Successfully added to favorite",
            type: "success"
        });
    } else {
        var notification = noty({
            text: data.error,
            type: "error"
        });

    }
    target.toggleClass("btn-danger").toggleClass("add").toggleClass("delete");
}

function toggleFavorite() {
    var href = $(this).attr("href");
    var target = $(this);

    $.get(href, function(){
        handleFavorite(target, data)
    }, "json");
    return false;
}

$(".favorite").click(toggleFavorite);   
于 2013-07-10T10:45:16.600 に答える