我試圖在我的網站中實現一個用戶信譽系統。所以你可以在他每次互動時看到用戶名後面的代表號(例如,每次他發表評論時)。還有一個投票系統也改變了用戶的聲譽,我希望代表號碼能反映這種變化。所以我通過ajax調用一個文件,該文件返回該用戶的新代表編號。在HTML/PHP文件是這樣的第一個實例(如果他做後):.replaceWith()只能工作一次
echo '<div class="rep_user_id" id="rep_user_id_'.$posts_row['userid'].'"> '.$posts_row['user_rep'].'</div>';
,然後(如果他作出評論):
echo '<div class="rep_user_id" id="rep_user_id_'.$com_row['userid'].'">'.$com_row['user_rep'].'</div>';
兩個給我這個:
<div class="rep_user_id" id="rep_user_id_110">293</div>
然後JS:
function change_reps() {
var userid = $('.rep_user_id').attr('id').replace('rep_user_id_','');
$.ajax({
url: "vote/get_reputation.php",
data: "userid="+userid,
success: function(server_response){
$("body").ajaxComplete(function(event, request){
var reputation = server_response;
$('#rep_user_id_'+userid).replaceWith(''+reputation);
$('#rep_user_id_'+userid).effect("highlight", {color:'red'}, 1000);
}); } }); }
該函數在另一個Ajax成功後調用(更新代表和投票)。所以,從這個角度來看,什麼是工作:一旦我點擊任何箭頭向上或向下,我可以看到投票計數器上或下,但我只看到用戶代表只改變了第一個實例(後)。爲什麼它只改變一次而不是整個文檔?有什麼需要做的是從另一個文件(包含)調用評論部分?僅供參考,效果在所有情況下都適用! 希望你能幫上忙。謝謝
編輯:由於我看到我沒有很好地解釋我自己,我添加了幾行。問題是我無法用一次相同的id和class修改多個元素(而不是多次改變一個元素)。所以我在整個頁面中有293次,但發佈的代碼只改變了一個元素! 這是什麼觸發change_reps():
$("body").on("click", ".vote_com_up", function(){
var com_id = $(this).attr('id').replace('vote_com_up_','');
$.ajax({
url: "vote/comment_vote.php",
data: "com_action=2&com_id="+com_id,
success: function(server_response){
$(".vote_com_number").ajaxComplete(function(event, request){
if(server_response == 'voted')
{ alert("Ya has votado en este post!");}
else{
var new_com_votes = server_response;
$("#vote_com_number_"+com_id).html(+new_com_votes);
} }); }
}).done(function() {
change_reps();
});
return false;
});
我做了一個小的jsfiddle顯示我想:
SOLUTION:布賴恩·尼格爾是正確的:我需要的類,而不是IDS。
聽起來像是stackoverflow :)只是重構他們的代碼 – 2012-01-10 02:50:14
你能發表更多的代碼嗎?什麼叫change_reps()? – 2012-01-10 02:52:49