Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.04.2020, 20:32
Аватар для katalizator
Интересующийся
Отправить личное сообщение для katalizator Посмотреть профиль Найти все сообщения от katalizator
 
Регистрация: 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
	});
}

Подскажите пожалуйста, как должен выглядеть рабочий код.
Ответить с цитированием
  #2 (permalink)  
Старый 03.04.2020, 20:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

JQ не отправляет на сервер не выбранные флажки, да и зачем?
Ответить с цитированием
  #3 (permalink)  
Старый 03.04.2020, 21:04
Аватар для katalizator
Интересующийся
Отправить личное сообщение для katalizator Посмотреть профиль Найти все сообщения от katalizator
 
Регистрация: 22.03.2013
Сообщений: 19

Сообщение от laimas Посмотреть сообщение
JQ не отправляет на сервер не выбранные флажки, да и зачем?
обработчик записывает новое значение в базу... Если галочка стоит - 1, если галочка снята - 0. В value содержится id поля, значение которого необходимо обновить.
Т.е. если галочку я снимаю, мне необходимо чтобы обработчик сохранил новое значение.
Ответить с цитированием
  #4 (permalink)  
Старый 03.04.2020, 21:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Как проверяет сервер? Ведь ему не сложно проверить - если есть в данных параметр значит пишем 1, если нет, то нет. А еще разумнее в базе дать полю значение по умолчанию, тогда в базу нужно записывать только пришедшие поля, конечно, если речь не идет об обновлении. Только именование полей как category[] без явных указаний ключей (без привязки) в данном случае есть плохой подход.

Если же все-таки все охота получить, то не используйте .serialize(), вместо этого получите все элементы формы, добавив их в отправление.
Ответить с цитированием
  #5 (permalink)  
Старый 04.04.2020, 13:31
Аватар для katalizator
Интересующийся
Отправить личное сообщение для katalizator Посмотреть профиль Найти все сообщения от katalizator
 
Регистрация: 22.03.2013
Сообщений: 19

Сообщение от laimas Посмотреть сообщение
если речь не идет об обновлении.
в том-то и дело что обновление. Ладно, спасибо большое за ответ. Придётся переходить на radio.
Ответить с цитированием
  #6 (permalink)  
Старый 04.04.2020, 14:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от katalizator
Придётся переходить на radio
Приехали, называется. Флажки и радио, это как небо и земля по предназначению, а значит ваши флажки изначально были не к месту.
Ответить с цитированием
  #7 (permalink)  
Старый 04.04.2020, 14:11
Аватар для katalizator
Интересующийся
Отправить личное сообщение для katalizator Посмотреть профиль Найти все сообщения от katalizator
 
Регистрация: 22.03.2013
Сообщений: 19

Сообщение от laimas Посмотреть сообщение
Приехали, называется. Флажки и радио, это как небо и земля по предназначению, а значит ваши флажки изначально были не к месту.
предполагается включение/отключение категории (1/0 в базе). С точки зрения интерфейса, хотелось сделать это путём установки снятия галочки, но придется через radio ВКЫЛ/ВЫКЛ
Ответить с цитированием
  #8 (permalink)  
Старый 04.04.2020, 14:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Флажок, это элемент для выбора множества из множества. Аналогом флажкам в базе является поле типа SET. А радио кнопки служат для выбора одного значения из множества. Их аналогам в базе является поле типа ENUM.

Если флажки служат для вкл/выкл и это набор, значит каждый флажок, это одно поле в таблице базы. Как можно гарантированно связать флажки с полями в базе именуя их category[]? Никак, так как не выбранный флажок браузер на сервер не отправляет и если будут выбраны все флажки, то все будет ОК, но стоит один из них сбросить, все пойдет крахом.

В таких случаях нужно явно определять ключ флажкам, например как category[id категории], или value флажков содержит id категории. В этом случае сбоя не произойдет, сервер всегда будет знать флажки каких категорий выбраны и нужно обновить.

У вас же все не по людски.
Ответить с цитированием
  #9 (permalink)  
Старый 04.04.2020, 14:43
Аватар для katalizator
Интересующийся
Отправить личное сообщение для katalizator Посмотреть профиль Найти все сообщения от katalizator
 
Регистрация: 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 знаком немного больше чем никак...
Ответить с цитированием
  #10 (permalink)  
Старый 04.04.2020, 15:34
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

У вас проблемы не в JS, а в связях параметры->база. Что означают значения полей? Зачем изменение флажка запускает отправление формы на сервер?

Вот ваши проблемы. Если обновление в базе должно производиться индивидуально по изменению каждого флажка, то действовать нужно не так, то что у вас, это ближе к групповому обновлению. Но в любом случае нужна связь, а что к чему у вас я ведь не знаю. Могу сказать только, что поля в качестве значений могут содержать индекс поля таблицы базы, то есть 1, 2, 3 ... это номера полей. На сервере можно это связать с реальными именами полей.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AJAX + Firefox некорректное отображение checkbox shu7 Firefox/Mozilla 2 26.06.2015 14:23
AJAX, JASON изменять цвет кнопки и значение формы. lvovitch AJAX и COMET 7 08.08.2013 18:58
Как с помощью AJAX изменить значение поля. wayzer Элементы интерфейса 9 16.09.2012 17:06
Передать значение в коллбэк Success для асинхронного Ajax denyweb AJAX и COMET 3 29.08.2012 23:20
Область видимости переменных на примере ajax human Общие вопросы Javascript 4 19.02.2009 23:12