
03.04.2020, 20:32
|
 |
Интересующийся
|
|
Регистрация: 22.03.2013
Сообщений: 19
|
|
Checkbox ajax unchecked не передает значение
Доброго дня.
Стоит задача: есть несколько полей - чекбоксов.
При установке галочки, значение value уходит в обработчик, при снятии уходит пустое значение.
Необходимо чтоб при снятии галочки, в обработчик уходил также значение value как и при установке.
Вот код:
<form method="post" action="this.form.submit();" name="form1">
<input type="checkbox" name="category[]" onclick="function1();" value="1">Поле 1
<input type="checkbox" name="category[]" onclick="function1();" value="2">Поле 2
<input type="checkbox" name="category[]" onclick="function1();" value="3">Поле 3
</form>
function function1() {
var data = $("[name='form1']").serialize();
$.ajax({
url: "action.php",
type: "POST",
async: true,
cache: false,
data: data
});
}
Подскажите пожалуйста, как должен выглядеть рабочий код.
|
|

03.04.2020, 20:52
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
JQ не отправляет на сервер не выбранные флажки, да и зачем?
|
|

03.04.2020, 21:04
|
 |
Интересующийся
|
|
Регистрация: 22.03.2013
Сообщений: 19
|
|
Сообщение от laimas
|
JQ не отправляет на сервер не выбранные флажки, да и зачем?
|
обработчик записывает новое значение в базу... Если галочка стоит - 1, если галочка снята - 0. В value содержится id поля, значение которого необходимо обновить.
Т.е. если галочку я снимаю, мне необходимо чтобы обработчик сохранил новое значение.
|
|

03.04.2020, 21:26
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Как проверяет сервер? Ведь ему не сложно проверить - если есть в данных параметр значит пишем 1, если нет, то нет. А еще разумнее в базе дать полю значение по умолчанию, тогда в базу нужно записывать только пришедшие поля, конечно, если речь не идет об обновлении. Только именование полей как category[] без явных указаний ключей (без привязки) в данном случае есть плохой подход.
Если же все-таки все охота получить, то не используйте .serialize(), вместо этого получите все элементы формы, добавив их в отправление.
|
|

04.04.2020, 13:31
|
 |
Интересующийся
|
|
Регистрация: 22.03.2013
Сообщений: 19
|
|
Сообщение от laimas
|
если речь не идет об обновлении.
|
в том-то и дело что обновление. Ладно, спасибо большое за ответ. Придётся переходить на radio.
|
|

04.04.2020, 14:04
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от katalizator
|
Придётся переходить на radio
|
Приехали, называется.  Флажки и радио, это как небо и земля по предназначению, а значит ваши флажки изначально были не к месту.
|
|

04.04.2020, 14:11
|
 |
Интересующийся
|
|
Регистрация: 22.03.2013
Сообщений: 19
|
|
|
|

04.04.2020, 14:21
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Флажок, это элемент для выбора множества из множества. Аналогом флажкам в базе является поле типа SET. А радио кнопки служат для выбора одного значения из множества. Их аналогам в базе является поле типа ENUM.
Если флажки служат для вкл/выкл и это набор, значит каждый флажок, это одно поле в таблице базы. Как можно гарантированно связать флажки с полями в базе именуя их category[]? Никак, так как не выбранный флажок браузер на сервер не отправляет и если будут выбраны все флажки, то все будет ОК, но стоит один из них сбросить, все пойдет крахом.
В таких случаях нужно явно определять ключ флажкам, например как category[id категории], или value флажков содержит id категории. В этом случае сбоя не произойдет, сервер всегда будет знать флажки каких категорий выбраны и нужно обновить.
У вас же все не по людски. 
|
|

04.04.2020, 14:43
|
 |
Интересующийся
|
|
Регистрация: 22.03.2013
Сообщений: 19
|
|
Помогите пожалуйста написать правильно код...
Вот что имею сейчас:
Есть форма:
<form method="post" action="this.form.submit();" name="form1">
<input type="checkbox" name="category[]" onclick="function1();" value="1">Поле 1
<input type="checkbox" name="category[]" onclick="function1();" value="2">Поле 2
<input type="checkbox" name="category[]" onclick="function1();" value="3">Поле 3
...
<input type="checkbox" name="category[]" onclick="function1();" value="n">Поле n
</form>
Есть попытка отправить данные в обработчик:
function function1() {
var data = $("[name='form1']").serialize();
$.ajax({
url: "action.php",
type: "POST",
async: true,
cache: false,
data: data
});
}
В базе у каждого поля есть столбец "enable" принимающее значение 1 или 0 (вкыл или выкл).
Обработчику (action.php) надо при нажатии на галочку (чекбокс или радио), получить id поля для которого меняем состояние, и само состояние (1 или 0) и дальше соответственно обновить инф-ю в базе. Вот как правильно эти данные обработчику передать, не могу разобраться.
Понимаю что делаю явно что-то не по людски)) Но с JS знаком немного больше чем никак...
|
|

04.04.2020, 15:34
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
У вас проблемы не в JS, а в связях параметры->база. Что означают значения полей? Зачем изменение флажка запускает отправление формы на сервер?
Вот ваши проблемы. Если обновление в базе должно производиться индивидуально по изменению каждого флажка, то действовать нужно не так, то что у вас, это ближе к групповому обновлению. Но в любом случае нужна связь, а что к чему у вас я ведь не знаю. Могу сказать только, что поля в качестве значений могут содержать индекс поля таблицы базы, то есть 1, 2, 3 ... это номера полей. На сервере можно это связать с реальными именами полей.
|
|
|
|