2016-07-07 4 views
0

У меня довольно простая проблема с таблицей, которую я создаю с помощью PHP foreach (в кодеигнитре).Флажки внутри таблицы с php foreach

В одной колонке внутри таблицы есть 2 флажка. Один true и один false, поэтому, когда я создаю таблицу, есть некоторые имена и информация, а затем 2 флажка. Всякий раз, когда пользователь нажимает кнопку true, я создаю вызов AJAX POST для моей базы данных, чтобы изменить состояние столбца. Но когда пользователь нажал true, а затем он нажимает false. Я хочу, чтобы флажок true был снят.

Вот код

<table class="responstable"> 
    <tr> 
    <th>ID</th> 
    <th><span>Name</span></th> 
    <th>number1</th> 
    <th>number2</th> 
    </tr> 

    <?php 
    foreach($students as $column => $data) { ?> 
    <tr>  
    <td><?php echo $data[0]->Userproperties_UserAM; ?></td> 
    <td><?php echo $data[0]->Userproperties_UserFullName; ?></td> 
    <td><?php echo $data[0]->UserAbsence; ?></td> 
    <td> <input class="true" id="<?php echo $data[0]->Userproperties_UserId; ?>" type='checkbox' value="<?php echo $data[0]->Userproperties_UserAM; ?>" /> 
    <label for='true'> 
    <span></span> 
    True  
    </label> 
    <input class="false" id="<?php echo $data[0]->Userproperties_UserId; ?>" type='checkbox' value="<?php echo $data[0]->Userproperties_UserAM; ?>" /> 
    <label for='false'> 
    <span></span> 
    False 
    </label></td> 
    </tr> 
<?php } ?> 
</table> 

И коды Аякса

$(document).ready(function() { 
    $('.true').change(function() { 
     if($(this).is(":checked")) { 
      $('.false').attr('checked', false); 
        var moduleid = <?php echo $moduleid; ?>; 
        var teacherid = <?php echo $teacherid; ?>; 
        var studentid = $(this).attr('id'); 
        var weeknum = $("#dropi").val(); 
        jQuery.ajax({ 
         type: "POST", 
         url: "<?php echo base_url(); ?>" + "index.php/TeacherParousies/send_parousia", 
         data: { 
          moduleid: moduleid, 
          studentid: studentid, 
          teacherid: teacherid, 
          parousia: 1, 
          weeknum: weeknum 
         }, 
         success: function(res) { 
         }, 
         error: function(err) { 
         } 
        }); 
       } 
      }); 
      $('.false').change(function() { 
       if($(this).is(":checked")) { 
       $('.true').attr('checked', false); 
        var moduleid = <?php echo $moduleid; ?>; 
        var teacherid = <?php echo $teacherid; ?>; 
        var studentid = $(this).attr('id'); 
        var weeknum = $("#dropi").val(); 
        jQuery.ajax({ 
         type: "POST", 
         url: "<?php echo base_url(); ?>" + "index.php/TeacherParousies/send_parousia", 
         data: { 
          moduleid: moduleid, 
          studentid: studentid, 
          teacherid: teacherid, 
          parousia: 0, 
          weeknum: weeknum 
         }, 
         success: function(res) { 
         }, 
         error: function(err) { 
         } 
        }); 
       } 
    }); 
}); 

Проблема здесь состоит в том, что, когда я проверить 2-ую строку флажка стола позволяет говорить false, есть изменения на 1-я строка для true, если она проверена.

Хотя я уже говорил

if($(this).is(":checked")) 

Любая идея?

+0

Считаете ли вы использование переключателей? – ymas

+0

@ymas nop Я просто задавался вопросом, почему он не снимает флажок с его собственной строки, и он также меняет все остальные строки. Я знаю его из-за 'class', но что мне делать, чтобы он работал с моим существующим кодом? И я думаю, что у меня будет такая же проблема, как и код выше. –

+0

Он изменяет другие строки, поскольку имя класса используется для проверки и снятия флажков, а класс не является уникальным идентификатором. Вместо использования имени класса используйте идентификаторы. –

ответ

3

В вашем случае это .false и .true снимет все. Вам просто нужно проверить ближайший элемент.

Не забудьте заменить код $ ('. True'). Attr ('checked', false); с этим кодом $ (this) .closest ("td") .find ('. true'). attr ('checked', false);

и сделать то же самое для $ ('. False'). Attr ('checked', false); это $ (this) .closest ("td") .find ('. false'). attr ('checked', false);

+0

Большое спасибо. Это работало как шарм :) –

Смежные вопросы