我试图在我的网站中实现一个用户信誉系统。所以你可以在他每次互动时看到用户名后面的代表号(例如,每次他发表评论时)。还有一个投票系统也改变了用户的声誉,我希望代表号码能反映这种变化。所以我通过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