3

我正在尝试使用 ajax 制作一个按钮,该按钮将收藏该线程。但它只能在收藏的线程上淡入和淡出收藏的图像。

我收到以下错误: Uncaught SyntaxError: Unexpected token this

这就是我的代码第 11 行: $(this + ' .is_favorited').fadeIn("slow");

这是完整的 Javascript 源代码:

$(".do_favorite").live("click", function() {
    var item = $(this).closest(".box");
    var content = $(this).attr('data-id');
    alert(content);
    $.post( 'ajax.favorite.php?sid=' + content + '',
        $(this).serialize(),
        function(data) {
            if (data == "1") {
                // Favorite it
                $(this + ' .not_favorited').fadeOut("slow", function (
                    $(this + ' .is_favorited').fadeIn("slow");
                ));
            }else if (data == "2") {
                // Un-Favorite it
                $(this + ' .is_favorited').fadeOut("slow", function (
                    $(this + ' .not_favorited').fadeIn("slow");
                ));
            }else {
                alert("DER SKETE EN FEJL DU");
            }
        }
    );
    return false;
});

希望有人能帮我解决这个问题,因为我真的需要使用this,让它只褪色点击的那个。

4

6 回答 6

4

您需要在选择器this中作为上下文传入或使用find()函数$(this)

改变

 $(this + ' .is_favorited').fadeOut("slow", function (

$('.is_favorited', this).fadeOut("slow", function (

使用在上下文后面调用的find()方法。

$(this).find('.is_favorited').fadeOut("slow", function (

编辑

如果您想在 post 函数中引用带有类 do_favorite 的事件源元素,那么您可以将其放入某个临时变量中,因为您无法this在其中引用post

$(".do_favorite").live("click", function() {
    var item = $(this).closest(".box");
    var content = $(this).attr('data-id');
    alert(content);
    do_favorite_OBJECT = $(this);
    $.post( 'ajax.favorite.php?sid=' + content + '',
        do_favorite_OBJECT.serialize(),
        function(data) {
            if (data == "1") {
                // Favorite it
                $('.not_favorited', do_favorite_OBJECT).fadeOut("slow", function (
                    $('.is_favorited', do_favorite_OBJECT).fadeIn("slow");
                ));
            }else if (data == "2") {
                // Un-Favorite it
                $('.is_favorited', do_favorite_OBJECT).fadeOut("slow", function (
                    $('.not_favorited', do_favorite_OBJECT).fadeIn("slow");
                ));
            }else {
                alert("DER SKETE EN FEJL DU");
            }
        }
    );
    return false;
});
于 2013-01-08T09:23:19.267 回答
4

你可以写成:

$(this).find('.not_favorited')
于 2013-01-08T09:23:56.980 回答
2

像这样保存你的“这个”

    $(".do_favorite").live("click", function() {
        var me = $(this);
        var item = me.closest(".box");
        var content = me.attr('data-id');
        alert(content);
        $.post( 'ajax.favorite.php?sid=' + content + '',
        me.serialize(),
        function(data) {
            if (data == "1") {
            // Favorite it
            me.find(' .not_favorited').fadeOut("slow", function (
                me.find('.is_favorited').fadeIn("slow");
            ));
            }else if (data == "2") {
            // Un-Favorite it
            me.find('.is_favorited').fadeOut("slow", function (
                me.find('.not_favorited').fadeIn("slow");
            ));
            }else {
            alert("DER SKETE EN FEJL DU");
            }
        }
        );
        return false;
    });
于 2013-01-08T09:25:29.103 回答
1

只需使用:

$(this).find('.not_favorited')
于 2013-01-08T09:33:31.883 回答
1

利用:

$(".is_favorited", this);

或者

$(this).find(".is_favorited");
于 2013-01-08T09:25:03.643 回答
1

this回调内部$.post不是您认为的 HTML 元素。您需要在调用之前将元素保存在变量中$.post

于 2013-01-08T09:27:37.443 回答