11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533

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

22.06.2018, 12:42. Показов 4659. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Необходимо производить обработку чекбокса при нажатии.
Есть чекбокс
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div data-property-id-row="22" class="clearfix">
                    <label>
                                <div class="bx_logotype">
                            <span style="background-image:url(/images/logo-default-d.gif);"></span>
                        </div>
                    </label>
                    <div class="bx_block r1x3 pt8">      
                        <input 
                        type="checkbox" 
                        id="sbor" 
                        onclick="fun1()"
                        method=post 
                        value="<?=$arResult['ORDER_PROP']['USER_PROPS_N'][22]['ID']?>"
                        />
 
                        <div class="bx_description">
                            <?=GetMessage("COST_OF_ASSEMBLY_SUMM")?><span style="font-weight: bold;"> 300</span>
                        </div>
                    </div>
                </div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script type="text/javascript">
                function fun1() {
                var chbox;
                chbox=document.getElementById('sbor');
                    if (chbox.checked) {
                        alert('Выбран');
                       <?$arResult['SBOR'] = 1;?>
                    }
                    else {
                        alert ('Не выбран');
                       <?$arResult['SBOR'] = 0;?>
                    }
                }
                </script>
Проверка нажатия происходит. Т.е. если кликнуть на чекбокс, то выводится сообщение "Выбран", если убрать галку - значение "Не выбран".
Но при распечатке
HTML5
1
echo "<pre>" .print_r($arResult['SBOR'],1)."</pre>";
всегда 0

Подскажите, пожалуйста, что делаю не так? Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.06.2018, 12:42
Ответы с готовыми решениями:

Сохранение значения чекбокса после перезагрузки страницы
Доброго времени суток! Есть чекбокс, при отмеченном чекбоксе фон у чекбокса изменяется (скрин &quot;Отмеченный&quot;,...

Сосчитать значения чекбокса
Здравствуйте, есть список чекбоксов: &lt;input type=&quot;checkbox&quot; value=&quot;4545&quot; name=&quot;vote&quot; test=&quot;0.2&quot;&gt; &lt;input ...

Запись значения чекбокса в БД
Доброго всем дня! Помогите с написанием кода. Есть страничка на html, в ней должен присутствовать чекбокс на подобии ползунка вкл /...

14
249 / 162 / 68
Регистрация: 10.12.2017
Сообщений: 558
22.06.2018, 17:38
HTML5
1
<input name="SBOR" ...
name - короче вместо id
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
22.06.2018, 19:15
_marisha, у Вас php никак не может выполниться на клиенте, поэтому при Вы видите html, а не результат
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
25.06.2018, 05:22  [ТС]
Evgen1337, спасибо что откликнулись.
Цитата Сообщение от Evgen1337 Посмотреть сообщение
name - короче вместо id
- в таком случае результат всё равно 0

Добавлено через 2 минуты
atanov, спасибо что откликнулись.
Цитата Сообщение от atanov Посмотреть сообщение
у Вас php никак не может выполниться на клиенте
- возможно сделать так, чтобы выполнялось?
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
25.06.2018, 05:43
_marisha, а Вам эта переменная, из массива с ключом SBOR, где понадобится? Если она необходима для серверного скрипта, то нужно воспользоваться ajax, без перезагрузки страницы или просто отправить get или post, через форму.
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
25.06.2018, 10:19  [ТС]
atanov, чекбокс и переменная $arResult['SBOR'] находится в файле test.php.
$arResult['SBOR'] понадобится в файле summary.php, который находится там же, где и файл test.php.
Были попытки отправки, но так и не удалось получить sbor в файле summary.php (возможно было сделано что-то не так)
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
25
26
27
28
<script type="text/javascript">
function fun1() {
var chbox;
chbox=document.getElementById('sbor');
    if (chbox.checked) {
        alert('Выбран');
       var sbor ;
       sbor = '1';
       <?$arResult['SBOR'] = 1;?>
       //location.href='?sbor='+message;
          $.ajax({
          url: "/bitrix/templates/likee_estore_s1/components/bitrix/sale.order.ajax/.default/summary.php",
          data : {sbor:sbor},
          type : "POST",
          success: function (data) {
          alert (data);
          },
          error: function(){
          alert ("No PHP script: ");
          } 
         });
    }
    else {
        alert ('Не выбран');
       <?$arResult['SBOR'] = 0;?>
    }
}
</script>
А в summary.php при распечатке echo "<pre>" .print_r($_POST,1)."</pre>"; пустой массив

Добавлено через 3 часа 30 минут
Можно сделать так:
в test.php
HTML5
1
2
3
4
5
<form action="checkbox-form.php" method="post">
            Do you need wheelchair access?
            <input type="checkbox" name="formWheelchair" value='YES' />
            <input type="submit" name="formSubmit" value="Submit" />
        </form>
В checkbox-form.php
PHP
1
2
3
4
5
6
7
8
9
10
if(isset($_POST['formWheelchair']) && 
   $_POST['formWheelchair'] == 'YES') 
{
    echo "Need wheelchair access.";
    //$arResult['SBOR'] = 1;
}
else
{
    echo "Do not Need wheelchair access.";
}
В summary.php проверка на отправленное значение проходит
PHP
1
2
3
4
5
6
7
8
9
if(isset($_POST['formWheelchair']) && 
                   $_POST['formWheelchair'] == 'YES')  
                {
                    echo "string";
                }
                else
                {
                    echo "NOOOOO";
                }
Но в таком случае после перезагрузки страницы чекбокс сбрасывается.
Вопрос, как тогда возможно сделать без кнопки "Отправить", т.е. чтобы при выборе чекбокса происходила отправка с сохранением позиции чекбокса (выбран/не выбран)
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
25.06.2018, 10:28
_marisha, вот Вам простейший пример, чтобы понять как запрашивать сервер, например на выполнение скрипта:

HTML5
1
2
3
4
<div class="bx_block r1x3 pt8">      
<input  type="checkbox" id="sbor"/>
</div>
<script src = "89.js"></script>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let arResult;
document.getElementById('sbor').onchange = fun1;
function fun1(){
if (document.getElementById('sbor').checked == true)
{
    arResult = 1;   
}
else
{
    arResult = 0;   
}
let requestToServer = new XMLHttpRequest();
requestToServer.open('POST', '89.php', false);
requestToServer.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
requestToServer.send('arResult=' + arResult);
alert (requestToServer.responseText);
}
PHP
1
2
3
<?php
echo $_POST['arResult'];
?>
В этом примере отслеживается изменение чекбокса: если нажат, то arResult = 1, нет arResult = 0. Далее эта переменная,arResult отправляется скрипту на сервер 89.php, который достаёт её из массива POST и просто выводит. js ждёт ответа, т.к. установлен на синхронный запрос, и выводит эту переменную.
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
25.06.2018, 12:25  [ТС]
atanov, спасибо за подробное описание
Делаю:
1) в файле test.php
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<div data-property-id-row="22" class="clearfix">
    <label>
        <div class="bx_logotype">
            <span style="background-image:url(/images/logo-default-d.gif);"></span>
        </div>
    </label>
    <div class="bx_block r1x3 pt8">
        <input 
        type="checkbox" 
        id="sbor" 
        onclick="fun1()"
        method=post 
        value="<?=$arResult['ORDER_PROP']['USER_PROPS_N'][22]['ID']?>"
        />
        
        <div class="bx_description">
            <?=GetMessage("COST_OF_ASSEMBLY_SUMM")?><span style="font-weight: bold;"> 300 tttttttt</span>
        </div>
    </div>
</div>
<script src = "/bitrix/templates/likee_estore_s1/components/bitrix/sale.order.ajax/.default/summary.js"></script>
2) В файле summary.js
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let arResult;
document.getElementById('sbor').onchange = fun1;
function fun1(){
if (document.getElementById('sbor').checked == true)
{
    arResult = 1;   
}
else
{
    arResult = 0;   
}
let requestToServer = new XMLHttpRequest();
requestToServer.open('POST', '/bitrix/templates/likee_estore_s1/components/bitrix/sale.order.ajax/.default/summary.php', false);
requestToServer.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
requestToServer.send('arResult=' + arResult);
alert (requestToServer.responseText);
}
3) В файле summary.php распечатываю
HTML5
1
echo "<pre>" .print_r($_POST,1)."</pre>";
- пустой массив при отмеченном чекбоксе/не отмеченном

Если содержимое summary.js прописать в файле test.php, тогда, если отметить чекбокс два раза открывается окно "Подтвердите действие на странице" (подтверждаю), но в summary.php $_POST пустой
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
25.06.2018, 13:41
_marisha, во-первых, уберите обработчик из html, стр. 11, заодно и 12-ю строку; во-вторых, если Вам не нужно на клиент возвращать, то 16-ю строку
JavaScript
1
alert (requestToServer.responseText);
тоже можно удалить; в-третьих, переменная, которую передаёт js, будет доступна вот тут:
PHP
1
$_POST['arResult']
, незачем весь массив пытаться перелопачивать, мало-ли что в нём и в-четвёртых, что делает скрипт summary.php и как это "распечатываю"?
0
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
25.06.2018, 13:59  [ТС]
atanov, стр 11, 12, 16 убраны

Вот эта переменная
PHP
1
$_POST['arResult']
не выводится в summary.php
Также
PHP
1
$_POST['arResult']
не выводится и в test.php

В summary.php выводится сумма товаров, скидка на товары и пытаюсь вывести значение чекбокса в пункт "Стоимость сборки" ($_POST['arResult']) (скрин "Стоимость")

Цитата Сообщение от atanov Посмотреть сообщение
и как это "распечатываю"?
- имеется ввиду вывожу весь массив $_POST для проверки, есть ли в нем данные или нет (echo "<pre>" .print_r($_POST,1)."</pre>"
Миниатюры
Передача значения чекбокса  
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
25.06.2018, 14:02
_marisha, каким образом запускается скрипт summary.php?
1
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
29.06.2018, 07:56  [ТС]
atanov, удалось произвести сохранение чекбокса после перезагрузки страницы следующим образом и в дальнейшем производить расчеты:
Файл delivery.php
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<h4><?=GetMessage("COST_OF_ASSEMBLY")?></h4>
<div data-property-id-row="22" class="clearfix">
    <label>
        <div class="bx_logotype">
            <span style="background-image:url(/bitrix/templates/likee_estore_s1/components/bitrix/sale.order.ajax/.default/images/logo-default-d.gif);"></span>
        </div>
    </label>
    <div class="bx_block r1x3 pt8">
        <input
            type="checkbox"
            form="ORDER_FORM"
            name="sbor"
            id="sbor"
            value="22"
            onclick="check_sbor(this); submitForm();"
            <?=$_COOKIE['sbor'] ? 'checked' : ''?>
        />
        <div class="bx_description">
            <?=GetMessage("COST_OF_ASSEMBLY_SUMM")?><span style="font-weight: bold;"> 300</span>
        </div>
    </div>
</div>
JavaScript
1
2
3
4
function check_sbor(chkbox)
{
    document.cookie = 'sbor=' + Number(chkbox.checked) + '; path=/; expires=Mon, 31 Jan 4000 00:00:00 GMT';
}
В summary.php делаем проверку на установлен чекбокс или нет. Если установлен, тогда выводим надпись "Стоимость сборки" и выводим значение стоимости сборки
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
                <!--Стоимость сборки-->
                <?if ($_COOKIE['sbor'] == 1)
                {?>
                    <?
                    $arResult['AMOUNTS_GOODS'] = str_replace(array(" ",'руб.'),"", $arResult['ORDER_PRICE_FORMATED'] );//сумма товаров, замена руб. и пробела на ''"
                    $arResult['ASSEMBLY_COST'] = intval(($arResult['AMOUNTS_GOODS']*5)/100);//стоимость сборки
                    if ($arResult['ASSEMBLY_COST']<300)
                    {
                        $arResult['ASSEMBLY_COST'] = 300;
                    }
                    $arResult['ASSEMBLY_COST'] = ceil($arResult['ASSEMBLY_COST']/10) * 10;//округление до десятков
                    $arResult['ASSEMBLY_COST'] = number_format($arResult['ASSEMBLY_COST'], 0, '', ' '); //разделение тысяч на пробелы
                    ?>
                    <tr>
                        <td class="custom_t1" colspan="<?= $colspan ?>" class="itog"><?= GetMessage("COST_OF_ASSEMBLY") ?>:</td>
                        <td><?=$arResult['ASSEMBLY_COST']?> руб.</td>
                    </tr>
                <?}?>
 
                <!--Стоимость сборки-->
Далее производим пересчет стоимости корзины.
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
29.06.2018, 08:31
_marisha, Вы молодец, поздравляю! Смотрю прибегли к кукам. На будущее в куках не следует хранить конфиденциальную информацию, особенно, если её никак не хешировать.
1
11 / 11 / 2
Регистрация: 29.05.2011
Сообщений: 533
29.06.2018, 08:50  [ТС]
atanov, спасибо ) Спасибо за информацию о куках, буду знать
Осталось теперь верно передать сумму заказа, т.к. в админке сумма заказа не изменяется с учетом стоимости сборки
Но это уже следующий этап штурма мозга
0
 Аватар для atanov
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
29.06.2018, 09:01
_marisha, удачи!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.06.2018, 09:01
Помогаю со студенческими работами здесь

Bootstrap 4: снятие галочки с чекбокса при выборе другого чекбокса
Здравствуйте! Как снять галочку чекбокса при выборе другого чекбокса, рассположенных в цикле? Спасибо. } elseif...

Как получить значения чекбокса
Доброй ночи. Прошу не судить строго. У меня вот такой вот вопрос по поводу передачи значения чекбокса. Как получить значение если оно...

Установка чекбокса в зависимости от значения в БД
Всем привет. Сейчас у меня в админке данная функция (ну или не знаю как по другому назвать, выборка что-ли...) идет как option. Хочу...

Передача значения и передача переменной
объясните мне разницу...и с кодами пожалуйста...думаю передача значений это через ссылки\указатели,а передача переменных-переменных ...

передача значения в ф-ию
onload=function () { var controls = document.getElementById('menu').getElementsByTagName('a'); var menu =...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru