Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,787

Передача на сервер изменения состояния чекбокса

06.05.2023, 18:42. Показов 940. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно передать на сервер простановку и снятие флажка на чекбоксе. Я это делаю так:

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<div class="bx_block">      
<input  type="checkbox" id="sb-1"/>
</div>
 
<script>
let arResult;
document.getElementById('sb-1').onchange = fun;
function fun(){
if (document.getElementById('sb-1').checked == true)
{
    arResult = 'checked';    
}
else
{
    arResult = 'zero';    
}
let requestToServer = new XMLHttpRequest();
requestToServer.open('POST', '89.php', false);
requestToServer.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
requestToServer.send('arResult=' + arResult);
}
</script>
Нормально все работает.

Но как быть, если чекбоксов несколько, например три?

HTML5
1
2
3
4
5
<div class="bx_block">      
<input  type="checkbox" id="sb-1"/>
<input  type="checkbox" id="sb-2"/>
<input  type="checkbox" id="sb-3"/>
</div>
В этом случае нужно передать не только состояние arResult, но и id чекбокса.

Тут код нужен какой-то совсем другой. Как это сделать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.05.2023, 18:42
Ответы с готовыми решениями:

Событие изменения состояния чекбокса + видимость дополнительного блока
Помогите. Я не знаю как объяснить по-другому мне надо не целая форма после загрузке, а лишь половина. такие штуки обычно в кряках...

Привязка состояния чекбокса
Задача сводится к тому, чтобы при нажатии на Чекбокс &quot;Check All&quot; выбирались все чекбоксы в TabItems. На сеттер CheckAll привязан метод,...

Js задать value в зависимости от состояния чекбокса
Здавствуйте. Есть такой кусок кода: &lt;input type=&quot;checkbox&quot; name=&quot;lit&quot;&gt; &lt;input type=&quot;hidden&quot; name=&quot;litvalue&quot;...

8
 Аватар для sash23
563 / 410 / 259
Регистрация: 31.05.2016
Сообщений: 1,105
06.05.2023, 18:58
JavaScript
1
2
3
4
5
6
7
8
document.getElementById('bx_block').onchange = function(e) {
    const tgt = e.target;
    if (tgt.classList.contains("ajax-checkbox")) {
      e.preventDefault();
      console.log(tgt.checked);
      console.log(tgt.id);
    }
};
HTML5
1
2
3
4
5
<div id="bx_block" class="bx_block">      
  <input  type="checkbox" class="ajax-checkbox" id="sb-1"/>
  <input  type="checkbox" class="ajax-checkbox" id="sb-2"/>
  <input  type="checkbox" class="ajax-checkbox" id="sb-3"/>
</div>
1
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,787
06.05.2023, 19:09  [ТС]
Чего-то я тут не допонял:



JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
let arResult;
document.getElementById('bx_block').onchange = function(e) {
    const tgt = e.target;
    if (tgt.classList.contains("ajax-checkbox")) {
      e.preventDefault();
      console.log(tgt.checked);
      console.log(tgt.id);
    }
};
 
function fun(){
if (document.getElementById('sb-1').checked == true)
{
    arResult = 'checked';   
}
else
{
    arResult = 'zero';   
}
let requestToServer = new XMLHttpRequest();
requestToServer.open('POST', '89.php', false);
requestToServer.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
requestToServer.send('arResult=' + arResult);
}

Так же работать не будет.
0
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
06.05.2023, 20:07
HTML5
1
2
3
4
5
<div class="bx_block">      
    <input  type="checkbox" id="sb-1"/>
    <input  type="checkbox" id="sb-2"/>
    <input  type="checkbox" id="sb-3"/>
</div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
const checkboxes = [...document.querySelectorAll('[type="checkbox"]')];
 
checkboxes.forEach(box => {
    box.addEventListener('change', async () => {
        let elems = checkboxes.filter(el => el.checked);
        if (!elems.length) return;
        let form = new FormData();
        elems.forEach(({ id }) => form.append(id, 'checked'));
        let response = await fetch('89.php', {method: 'POST', body: form});
        response.ok ? console.log(`Всё пучком`) : console.log(`Засада`);
    });
});
Добавлено через 7 минут
vlad-55, вам все чекбоксы нужно на сервер отправлять или только с checked?

Добавлено через 4 минуты
... если все, то так...
JavaScript
1
2
3
4
5
6
7
8
checkboxes.forEach(box => {
    box.addEventListener('change', async () => {
        let form = new FormData();
        checkboxes.forEach(el => form.append(el.id, el.checked ? 'checked' : 'zero'));
        let response = await fetch('89.php', {method: 'POST', body: form});
        console.log(response.ok ? `Всё пучком` : `Засада`);
    });
});
1
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,787
06.05.2023, 20:21  [ТС]
Отправлять нужно все чекбоксы.

Добавлено через 13 минут
Вцелом код такой:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div class="bx_block">      
    <input  type="checkbox" id="sb-1"/>
    <input  type="checkbox" id="sb-2"/>
    <input  type="checkbox" id="sb-3"/>
</div>
 
<script>
const checkboxes = [...document.querySelectorAll('[type="checkbox"]')];
 
checkboxes.forEach(box => {
    box.addEventListener('change', async () => {
        let elems = checkboxes.filter(el => el.checked);
        if (!elems.length) return;
        let form = new FormData();
        elems.forEach(({ id }) => form.append(id, 'checked'));
        let response = await fetch('89.php', {method: 'POST', body: form});
        response.ok ? console.log(`Всё пучком`) : console.log(`Засада`);
    });
});
</script>
Какую переменную ловить в файле 89.php ?

Изначально там было так:
PHP
1
2
3
    $znak = $_POST['arResult'];
 
    file_put_contents('1-znak.txt', $znak);
Что сейчас должно быть?
0
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
06.05.2023, 20:36
Цитата Сообщение от vlad-55 Посмотреть сообщение
Нормально все работает.
Давай так попробуем, если нормально работает с new XMLHttpRequest()
HTML5
1
2
3
4
5
<div class="bx_block">      
    <input  type="checkbox" id="sb-1"/>
    <input  type="checkbox" id="sb-2"/>
    <input  type="checkbox" id="sb-3"/>
</div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
const checkboxes = [...document.querySelectorAll('[type="checkbox"]')];
 
checkboxes.forEach(box => {
    box.addEventListener('change', () => {
        let [form, requestToServer] = [new FormData(), new XMLHttpRequest()];
        checkboxes.forEach(({ id, checked }) => form.append(id, checked ? 'checked' : 'zero'));
        requestToServer.open('POST', '89.php', false);
        requestToServer.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        requestToServer.send(form);
    });
});
Цитата Сообщение от vlad-55 Посмотреть сообщение
Изначально там было так:
PHP
1
2
$znak = $_POST['arResult'];
file_put_contents('1-znak.txt', $znak);
какую переменную ловить в файле 89.php ?
Лови $_POST['sb-1'], $_POST['sb-2'], ...
1
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,787
06.05.2023, 20:45  [ТС]
Да, нормально работает.

Вот только желательно привязать функцию к class="bx_block". Потому, что есть и другие чекбоксы, которые не входят в эту группу, и которые работают иначе.
0
 Аватар для klyapa
3503 / 1267 / 429
Регистрация: 24.07.2016
Сообщений: 1,890
06.05.2023, 21:11
Лучший ответ Сообщение было отмечено vlad-55 как решение

Решение

Цитата Сообщение от vlad-55 Посмотреть сообщение
Вот только желательно привязать функцию к class="bx_block". Потому, что есть и другие чекбоксы, которые не входят в эту группу, и которые работают иначе.
Не понимаю, что вы хотите привязать. Чекбоксы реагируют на событие change, при чём здесь внешний элемент? Вы можете собрать в массив все элементы bx_block...
JavaScript
1
const blocks = [...document.querySelectorAll('.bx_block')];
... и потом, в зависимости от группы чекбоксов, кот. работают иначе, в цикле устанавливать им нужные обработчики...
JavaScript
1
2
3
4
5
6
blocks.forEach(block => {
    // block - нужный вам блок
    const checkboxes = [...block.querySelectorAll('[type="checkbox"]')];
    // checkboxes - массив чекбоксов [нужного вам блока]
    // дальше по схеме, кот. вы уже знаете
});
1
156 / 20 / 5
Регистрация: 21.02.2009
Сообщений: 2,787
06.05.2023, 22:16  [ТС]
Да, я всё понял, спасибо!

Красивое решение получилось!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2023, 22:16
Помогаю со студенческими работами здесь

Очистить комбобокс в зависимости от состояния чекбокса
Добрый вечер. Есть форма с комбобоксом два чекбокса. В зависимости от состояния чекбокса нужно очистить комбобокс для отображеня данных...

Проверка состояния чекбокса, созданного в js без ссылки на elemendId в html
Помогите, пожалуйста, новичку. На JS нужно реализовать вопросник, где пользователь отмечает в чекбоксах ответы. Эти ответы нужно...

При нажатии на кнопку в зависимости от состояния чекбокса на вторую форму добавить элемент
Нужно что бы при нажатии на кнопку Button1 на Form1, в том случае если checkBox1.Cheked = True на Form2 добавлялся label.

Передача значения чекбокса
Доброго времени суток! Необходимо производить обработку чекбокса при нажатии. Есть чекбокс &lt;div...

Как запретить пользователю переключение состояния "чекбокса"?
Подскажите как в PyQt5 запретить пользователю переключение состояния &quot;чекбокса&quot;? Дело в том, что я встраиваю чекбокс в ячейку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru