2016-07-20 4 views
0

У меня есть простая функция, которая проверяет состояние базы данных при щелчке по флажку и позволяет либо проверять, либо отключать ее. Я включил условие в jQuery, которое обходит это условие, если оно не отмечено (так как пользователю всегда должно быть разрешено его отменить).Условное снятие флажка с помощью jQuery

Использование console.log для определения того, что происходит при выполнении, все работает как ожидается кроме, который не снимает флажок. Кажется, $('#oncall').prop('checked', false); просто ничего не делает.

$(document).on('click','#oncall',function(e){ 
     e.preventDefault(); 
     if ($(this).is(':checked')) { 
      $.ajax({ 
       url: 'includes/oncall.ajax.php', 
       type: "POST", 
       data: {'sheet_date':$('#sheet_date').val()}, 
       success: function(data) { 
        if (data == 1) { 
        $('#oncall').prop('checked',true); 
        } else { 
        $('#oncall').prop('checked', false); 
        } 
       }, 
       error: function() { 
        alert("Something went wrong."); 
       } 
      }); 
     } else { 
      $('#oncall').prop('checked', false); 
     } 
    }); 

HTML, который применим, является простой галочкой;

<label for="oncall" class="onlab"><input type="checkbox" value="1" name="oncall" class="oncall_box" id="oncall"><span class="oncall_label">On call</span></label> 

Он работает, чтобы активировать флажок (при условии, что условие базы данных выполнено), но не наоборот.

ответ

0

Примерно через час, я обнаружил, что проблема была.

e.preventDefault(); заблокировал флажок от состояния переключения, что означало, что логика в состоянии была отменена - флажок не был проверен, как только он был нажат.

я исправил эту проблему путем изменения, если условия

if (!$(this).is(':checked')) { 
0

var data = 0;//if data = 1 it will check 
 
$('#oncall').prop('checked',data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<label for="oncall" class="onlab"><input type="checkbox" value="1" name="oncall" class="oncall_box" id="oncall"><span class="oncall_label">On call</span></label>

Используйте как этот

+0

Спасибо за попытку, но это было не так. Я понял, в чем проблема, у меня есть «e.preventDefault();», что означает, что логика для условия была обратной (потому что она препятствует переключению флажка). Все, что мне было нужно, было '!' В начале 'if'. –

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