2014-06-14 4 views
0

Например, если я нажму кнопку «проголосовать», он успешно добавляет голосование за первое сообщение и отображает результат в элементе span с классом = «rate_votes», но он также отображает тот же результат в все элементы диапазона с одинаковым классом из-за следующей строки:Codeigniter ajax call не работает должным образом

$ (". rate_votes"). текст (курс); //

Как я могу избежать этого? Если я использую

$ (this) .text (rate); //

он не будет работать должным образом, потому что он не знает, какой элемент диапазона выбрать. Не могли бы вы мне помочь, пожалуйста.

Вот мое мнение:

<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"); 
      });  

}); 
+1

Вы проверили это? Попробуйте firebug для контроля вызовов ajax. – CMPS

ответ

3

Это не имеет ничего общего с CodeIgniter :)

Вы связать событие щелчка к ID , #rate, но этот идентификатор появляется несколько раз.

$data = array( 'name' => $id, 'id' => 'rate',
'content' => 'Vote Up' ); echo form_button($data);

использовать вместо класса.

При выборе идентификатора, который появляется несколько раз, выбирается только первый, при этом работает только первая кнопка.

EDIT
Ваш комментарий звучит немного странно, учитывая этот код, например:
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 clic ked. Это событие запускается только один раз и только для этого элемента.

Дважды проверьте свой javascript.

+0

Отредактировав мой ответ, попробуйте изменить '$ ('# rate'). Attr (« disabled », true); 'to' $ (this) .attr ("disabled", true); ' – Patrick

+0

Патрик, я изменил идентификатор на класс, но есть проблема со следующими строками: $ (". Rate_votes "). Text (rate); $ ('Ставка') текст ("Проголосовали!"). – NiceTry

+0

Я не вижу этот идентификатор в любом месте кода, который вы отправили, прочитайте другой ответ, который выложили. – Patrick

3

Вы использовали:

$("#rate").click(function(){...}) 

Здесь "#rate" является id и id должен быть уникальным, используйте class как .rate. Если на странице имеется несколько элементов с одинаковыми id, тогда будет учитываться только первый элемент страницы.Таким образом, следующий код регистрации обработчика щелчка только на первый элемент с идентификатором rate:

$("#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 

    //... 
}); 
Смежные вопросы