Codeigniter ajax调用无法正常工作

时间:2014-06-14 05:27:14

标签: javascript jquery ajax codeigniter

例如,如果我单击“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");  
            });     

});

2 个答案:

答案 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"idid必须是唯一的,请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

    //...
});