Незарегистрированный флажок, возвращая нулевое значение

У меня есть ряд флажков, которые, когда проверено они передают стоимость как 1, иначе они передают стоимость как 0. Однако вместо того, чтобы послать ценность незарегистрированных флажков как '0', посылаемая стоимость 'ПУСТАЯ'.

У меня есть следующий код JS в месте, которое должно установить значение к 0/1 соответственно, однако все еще стоимость посылают как ПУСТОЙ УКАЗАТЕЛЬ. Есть ли что-нибудь, что может быть сделано, чтобы удостовериться, что стоимость, переданная в случае незарегистрированного флажка, 0?

$('#cb1, #cb2, #cb3, #cb4').on('click', function ()
    $(this).val(this.checked ? 1 : 0);
});

UPDATED Here is my html:

<input type="checkbox" name="cb1" id="cb1" value="1" checked />
<input type="checkbox" name="cb2" id="cb2" value="1" checked />
<input type="checkbox" name="cb3" id="cb3" value="1" checked />
<input type="checkbox" name="cb4" id="cb4" value="1" checked />

Они все проверяются по умолчанию.

Если один из них неконтролируем, MySQL сообщает о следующей ошибке: 0SQLSTATE[23000]: нарушение Ограничения целостности: 1048 Колонок 'ColumnName' не могут быть пустыми.

Это вызвано тем, что колонки собираются установить, чтобы не быть Пустыми. И даже при том, что я установил значение по умолчанию в 0, как только я нажимаю на кнопку отправки, я все еще получаю ошибку. Я пытался удалить Не ПУСТУЮ собственность, однако, вместо того, чтобы предварительно заполнить стоимость как 0, вход был ПУСТЫМ в базе данных.

8
добавлено отредактировано
Просмотры: 1
это должно работать, но вы пропускаете { в вас JavaScript... here' s скрипка: jsfiddle.net/5vS3S
добавлено автор lnrbob, источник
Рассмотрите изменение вашего HTML как это: <�входной тип = "скрытое" имя = "cb1" оценивает = "0" /> <�входной тип = имя "флажка" = "cb1" id = "cb1" стоимость = "1" проверил /> .
добавлено автор DCoder, источник
Вы могли также добавить свой HTML?
добавлено автор timing, источник

5 ответы

Если флажок неконтролируем, это не становится посланным, так урегулирование, это - стоимость к 0, если это не проверяется, не собирается помогать - это будет всегда возвращать ПУСТОЙ УКАЗАТЕЛЬ.

Есть два способа зафиксировать это легко:

1) Предположите, что ПУСТОЙ УКАЗАТЕЛЬ в PHP params означает, что флажок неконтролируем. Если флажок не всегда существует на странице, это могло бы быть проблематично. Звуками его есть переменное количество флажков, таким образом, это, вероятно, не будет работать.

2) Добавьте скрытый вход, у которого есть то же самое имя как флажок с ценностью 0 ПРЕЖДЕ флажок. Если флажок будет неконтролируем, скрытое значение поля будет использоваться, если это будет проверено, то стоимость флажка будет использоваться.

<input type="hidden" name="checkbox_1" value="0">
<input type="checkbox" name="checkbox_1" value="1">

Примечание: Если ваши имена будут в форме множества (т.е. у них есть квадратные скобки в них), это не будет работать, поскольку скрытые области увеличат количество множества также.

48
добавлено
@axiom82 вы didn' t получают его. Да, можно сделать это, но когда флажок будет проверен, вы добавите ДВА элемента к целевому массиву, таким образом, вы скоро потеряете корреспонденцию индексов к флажкам и вам won' у t есть любая полезная информация, указывающая, относится ли индекс множества к проверенному или незарегистрированному пункту. Можно сделать некоторую легкую постобработку полученного массива, чтобы избежать этого, все же.
добавлено автор Pere, источник
@Azmatkarim Помещают число в квадратные скобки - you' ll должны справиться, увеличивание - просто удостоверяются, что у скрытой области и флажка есть тот же самый индекс. т.е. <�входной тип = "скрытое" имя = стоимость "флажка [0]" = "0"> <�входной тип = имя "флажка" = стоимость "флажка [0]" = "1"> <�входной тип = "скрытое" имя = стоимость "флажка [1]" = "0"> <�входной тип = имя "флажка" = стоимость "флажка [1]" = "1">
добавлено автор Myles Eftos, источник
На самом деле, если ваши имена находятся в форме множества, просто включают ключ для индекса в скобках. Вы тогда будете в состоянии определить входные имена как множества.
добавлено автор axiom82, источник
Какое большое решение, Спасибо
добавлено автор krachleur, источник
что имеет место, если я должен собрать многократные ценности флажка Linke <�входной тип = имя "флажка" = "slides_data [enable_content] []" стиль = "минимальная ширина: 20 пкс";/>
добавлено автор Azmat Karim Khan, источник
я думаю, что это должно работать, идеал для пропавших без вести доберется 0, и для проверки я войду в спасибо - обновляют не работа ее добавление другого начиная с ее множества
добавлено автор Azmat Karim Khan, источник
Спасибо @Myles Eftos, на самом деле есть партия раздела, который содержит флажок, и они могут быть удалены и обновлены в любом заказе, таким образом, я должен повторно внести весь флажок в указатель, таким образом, я переключился, чтобы выбрать элемент с 2 выборами ДА и НЕ который работает отлично. и спасибо за ваш ответ, который был чем-то новым, которое я изучил:)
добавлено автор Azmat Karim Khan, источник
это объясняет его. спасибо
добавлено автор EvilSmurf, источник
Отличное решение. Помогший меня много, особенно второй. Спасибо!
добавлено автор Engr Arefin, источник
Вы - гений.
добавлено автор lracicot, источник

ИЗМЕНЕНИЕ ВАШ СЦЕНАРИЙ КАК ЭТО. IT НАДЕЖДЫ ПОМОГАЕТ.

$(document).ready(function(){
    $('#cb1, #cb2, #cb3, #cb4').click(function(){
        $(this).val(this.checked ? 1 : 0);
    });
});
1
добавлено

Это вызвано тем, что, если вы отсеяли флажок, стоимость пустая, потому что у этого нет стоимости. Проверьте этот пример от w3cschools:

http://www.w3schools.com/html/tryit.asp? filename=tryhtml_form_checkbox

Если вы ничего не выбрали, стоимость не становится представленной. Но если вы выбрали что-то, его стоимость будет представлена.

Если вы действительно хотите истинную/ложную стоимость, необходимо обмануть ее.. поэтому пошлите состояние проверенного признака, добьется цели.

$('#id:checked').length
0
добавлено

С jQuery вы могли использовать проверенного отборщика, чтобы получить государство флажка. Когда это проверяется, длина содержит что-то большее, чем 0, например:

$('#id:checked').length

Таким образом, вы не должны устанавливать значение элемента флажка к 0...

0
добавлено

Можно попробовать это, это может помочь вам. Примите свою форму, похож на это:

<tr>
  <td>Active</td>
  <td><?php echo form_checkbox('active',set_value('active',$student->active),TRUE); ?>  </td>
</tr>

Теперь вы устанавливаете своего codeigniter диспетчера как это:

// Set up the form
$rules = $this->student_m->rules;
$this->form_validation->set_rules($rules);

// Process the form
if ($this->form_validation->run() == TRUE) {
   $data = $this->student_m->array_from_post(array(
           'active',
           'name'
   ));

  //checking is checkbox is checked or not
   ($data['active'] == TRUE)?($data['active'] = 1) : ($data['active'] = 0);

   $this->student_m->save($data, $id);
   redirect('admin/student');
}
0
добавлено