例如,如果我单击“up up”按钮,它会成功添加第一个帖子的投票并使用class =“rate_votes”在span元素中显示结果,但它也会在具有相同类别的所有span元素中显示相同的结果因为以下一行:
$( “rate_votes”)文本(速率)。 //
我该如何避免? 如果我使用
$(本)的.text(率); //
它无法正常工作,因为它不知道要选择哪个span元素。你能帮我吗?
以下是我的观点:
<div>
<?php
foreach($results as $row){
$id = $row['id'];
$rate = $row['rate'];
?>
<div>
<?php
$data = array(
'name' => $id,
'class' => 'rate',
'content' => 'Vote Up'
);
echo form_button($data);
?>
<span class="rate_votes" >
<?php echo $rate; ?>
</span>
</div>
</div>
这是我的JS文件:
$(document).ready(function() {
$(".rate").click(function(){
var self = this;
$(self).attr("disabled", true);
var id_like = $(self).attr("name");
$.post('filter/get_rate', { id_like: id_like }, function (data) {
var my_obj = data;
$.each(my_obj, function (i) {
var rate = my_obj[i].rate;
$(".rate_votes").text(rate); //
$(self).text("Voted!");
});
}, "json");
});
});
答案 0 :(得分:3)
这与codeigniter无关:)
您将点击事件绑定到ID #rate
,但该ID会多次出现。
$data = array(
'name' => $id,
'id' => 'rate',
'content' => 'Vote Up'
);
echo form_button($data);
改为使用班级。
当您选择多次出现的ID时,仅选择第一个ID,因此只有第一个按钮有效。
修改强>
你的评论听起来有点奇怪,例如这个代码:
的 HTML:强>
<div class="foo">Foo</div>
<div class="foo">Foo</div>
<div class="foo">Foo</div>
<div class="foo">Foo</div>
Javascript / Jquery
$('.foo').click(function() { $(this).remove() });
上面的代码只删除了被点击的特定div,即事件只被触发一次而且仅针对该元素。
仔细检查你的javascript。
答案 1 :(得分:3)
您使用过:
$("#rate").click(function(){...})
此处"#rate"
是id
而id
必须是唯一的,请class
使用.rate
。如果页面上有多个具有相同id
的元素,则只会计算页面的第一个元素。因此,以下代码仅在标识为rate
的第一个元素上注册click处理程序:
$("#rate").click(function(){
//...
});
改为为您的元素添加一个类,例如:
<button class='rate'>Rate</button>
<button class='rate'>Rate</button>
因此,此代码适用于每次点击按钮:
$(".rate").click(function(){
var id_like = $(this).attr("name");
$(this).attr("disabled", true); // disables the current button
$('.rate').attr("disabled", true); // disable all the buttons with class rate
//...
});