2011-11-04 91 views
0

即時創建一個類似的系統,但我已經遇到了一個問題,當用戶按下像「喜歡」的文本應更改爲「刪除像」jQuery的替換文本內錨

數據來源於一個PHP查詢所以那裏有與同級別的許多項目

<table class="UserHistoryTable"> 
<td data-rowtype="stat" data-rowuser="1" data-rowid="1" class="UserHistoryTableTD"> 
<a href="#" class="like">Like</a></td> 
</table> 

數據rowuser是用戶按下喜歡按鈕的ID,數據ROWID是活動 的什麼我想要做的是id,當有人按下「像「鏈接,它應該更改爲」刪除像「 我已嘗試使用此代碼:

$('.like').click(function(){ 
var the_id = $(this).parent().data('rowid') 
var user_id = $(this).parent().data('rowuser') 
var user_id = $(this).parent().data('rowtype') 
    $.ajax({ 
     url: "like.php", 
     data: "action=likestat" + "&id=" + the_id + "&uid=" + user_id, 
     success:function(response){ 
      var findtext = $('.UserHistoryTableTD > .like', this); 
      $(findtext).replaceWith("Remove like"); 
     } 
    }); 
}); 

回答

3

你有幾個問題。 this在成功處理程序中的值不會與您想要的值相同(它將具有與ajax調用相關的不同值)。而>選擇器意味着直接子和.like不是父表的直接子。如果將this的值保存在局部變量中,則可以直接在ajax處理程序中使用它。

更改代碼這樣:

$('.like').click(function(){ 
    var the_id = $(this).parent().data('rowid') 
    var user_id = $(this).parent().data('rowuser') 
    var self = this; // save for use in success handler 
    $.ajax({ 
     url: "like.php", 
     data: "action=likestat" + "&id=" + the_id + "&uid=" + user_id, 
     success:function(response){ 
      $(self).html("Remove like"); 
     } 
    }); 
}); 

你也可以幹它有點兒像這樣:

$('.like').click(function(){ 
    var $self = $(this);    // save this for use later 
    var $td = $self.closest("td"); // find correct parent, regardless of other markup 
    $.ajax({ 
     url: "like.php", 
     data: "action=likestat" + "&id=" + $td.data('rowid') + "&uid=" + $td.data('rowuser'), 
     success:function(response){ 
      $self.html("Remove like"); 
     } 
    }); 
}); 
+0

爲什麼'$ self'? (只想學習) – samura

+1

@samura - 您必須將'this'的值保存在局部變量中,以便您可以在成功處理程序中使用它(因爲'this'將在成功處理程序中具有不同的值)。由於我們需要'$(this)'在幾個地方,我保存它而不是'this'。一個受保護的'this'變量的流行約定是'self'。保存jQuery對象的另一個流行約定是以'$'開頭。因此,我們最終以'$ self'作爲變量名稱(一個表示'this'的jQuery對象)。 – jfriend00

+0

哇,這比我問的還要多!感謝您縮短我的代碼,並幫助我:)(我喜歡當人們幫助我) – Flaashing

0

你應該只能夠做到:

$(this).html("Remove like"); 

你的點擊事件處理中。

+0

以及ID喜歡肯定的是,像得到了插入數據庫編輯文本之前,但該選項的工作,另一方面:)謝謝 – Flaashing

+0

'this'在ajax成功處理程序中沒有正確的值。 – jfriend00

1

不能使用this內的成功,讓您保存一個變種$(this)您的成功事件之外。

$('.like').click(function(){ 
var like_button = $(this); 
var the_id = $(this).parent().data('rowid'); 
var user_id = $(this).parent().data('rowuser'); 
var user_id = $(this).parent().data('rowtype'); // something is wrong here :s 
    $.ajax({ 
     url: "like.php", 
     data: "action=likestat" + "&id=" + the_id + "&uid=" + user_id, 
     success:function(response){ 
      like_button.replaceWith("Remove like"); 
     } 
    }); 
}); 

(編輯詹姆斯評論的建議)

而且什麼是錯的行數4/5。

+0

由於您已經在第一行將'this'傳入jQuery,因此無需在'success'函數中再次執行。但+1是第一個正確回答的! –

+0

你是對的...編輯。 – samura

+0

狗屎謝謝你指出我的失敗..我不明白爲什麼那部分沒有工作:/謝謝 並感謝一噸的答案!它美麗的工作:) – Flaashing

0

使用jQuery的.html()函數可以更輕鬆地完成。
http://jsfiddle.net/Hz7WY/

頭:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> 
<script type="text/javascript"> 
$('.like').click(function(){ 
var the_id = $(this).parent().data('rowid') 
var user_id = $(this).parent().data('rowuser') 
var user_id = $(this).parent().data('rowtype') 
     $('.like').html('Unlike'); 
}); 
</script> 

身體:

<table class="UserHistoryTable"> 
<td data-rowtype="stat" data-rowuser="1" data-rowid="1" class="UserHistoryTableTD"> 
<a href="#" class="like">Like</a></td> 
</table>