2013-01-08 40 views
3

我正在嘗試使用ajax製作一個按鈕,該按鈕最喜歡該線程。但它只能淡入淡出喜歡的線索上的收藏圖片。在jQuery中使用'this'變量fadeIn?

我收到以下錯誤: 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,使它只褪色點擊一個。

回答

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; 
    }); 
+0

這仍然給出相同的錯誤。我真的不知道爲什麼,我之前使用過這種方法,但不是'$ .post'。 –

+0

沒關係,我知道了,另一個問題是,'function(...)'應該改成'function(){...}' –

+0

非常感謝.... –

4

您需要通過this作爲context在選擇或使用$(this)find()功能。

變化

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

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

使用find()方法,它是上下文背後通話。

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

編輯

如果你想在後期功能類do_favorite指事件源元素,那麼你把它放到一些臨時變量,你不能在post

this參考
$(".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; 
}); 
+0

出於某種原因,採用這種時候我仍然得到同樣的錯誤。 –

+0

你能告訴我們html結構嗎? – Adil

+0

沒關係,我有一個'function(...)'應該是'function(){...}'的錯誤,非常感謝。 –

4

你可以寫爲:

$(this).find('.not_favorited') 
+0

我也試過這個,但是正如@David所說,'this'在'$ .post'裏面不起作用,感謝這個想法。 –

+1

@ErikHansen是的大衛是對的。 '這個'不會在'$ .post'裏面工作 –

+0

這個例子只是解決了組合選擇器的問題。它表明你不能連接'this'和其他字符串。 –

1

用途:

$(".is_favorited", this); 

$(this).find(".is_favorited"); 
+0

也不管用,謝謝你的回覆。錯誤仍然是一樣的。 –

1

this一個$.post回調裏面是不是你認爲它是HTML元素。在調用$.post之前,您需要將元素保存在變量中。

+0

我不知道,謝謝信息。我試圖將'this'保存到一個變量中,然後用它來代替,但仍然沒有運氣。 –

1

只需使用:

$(this).find('.not_favorited') 
+0

也不管用,謝謝你的回覆。錯誤仍然是一樣的。 –