Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Web > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 24.05.2018, 07:19   #1
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 243
Репутация: -23
По умолчанию Чекбоксы и ajax

День добрый, возникла не большая проблема) есть чекбоксы
Код HTML:
<div id="rol_svet">
    <p style="text-align: center;"><strong>Прозрачность</strong></p>
    <input id="svet" type="checkbox"> Светопропускающией
    <input id="svet_bo" type="checkbox"> ВО 
</div>
которые отправляют ajax запрос
Код HTML:
$(document).ready(function() {
    
    $('#rol_svet input:checkbox').click(function(){
    if ($('#svet').is(':checked')) {
    $.ajax({
          type: 'POST',
          url: 'bd.php',
          data: 'svet_but=svet',
          success: function(e){
          $("#block-tovar-grid").html(e);
          }
        });
    }
        
    if ($('#svet_bo').is(':checked')) {
    $.ajax({
          type: 'POST',
          url: 'bd.php',
          data: 'svet_bo=svetbo',
          success: function(e){
          $("#block-tovar-grid").html(e);
          }
        });
    }
        else
        {
     $.ajax({
          type: 'POST',
          url: 'bd.php',
          data: 'rol_but=rol',
          success: function(e){
          $("#block-tovar-grid").html(e);
          }
        });         
        }
    $('#rol_svet input:checkbox').not(this).prop('checked', false);
}); 
});
PHP код:
$table_rol='tkani/role_tkani.php';
if (isset(
$_POST['svet_but']))
 {
$vibor 'WHERE svet = "1"';
  include 
$table_rol;}
if (isset(
$_POST['svet_bo']))
 {
$vibor 'WHERE svet = "0"';
  include 
$table_rol;}
if (isset(
$_POST['rol_but']))
 {include 
$table_rol;} 
Если нажат чекбокс #svet то выбираем значения 1 колонки svet таблицы role.
Если нажат чекбокс #svet_bo то выбираем значения 0 колонки svet таблицы role.
Если чекбоксы не выбраны то используем всю колонку svet таблицы role.

При клике на чекбоксы они срабатывают то с первого то со второго раза, особенно первый чекбокс #svet. Где ошибка, что не так?
__________________
Еду медленно, но верно!
spoon100500 вне форума   Ответить с цитированием
Старый 24.05.2018, 08:41   #2
Stanislav
Квадрокоптерист
Профессионал
 
Регистрация: 29.09.2007
Сообщений: 1,751
Репутация: 489
По умолчанию

Учитесь отлаживать, ставьте console.log и жмакайте чекбоксы. Касательно кода простите но он безобразен, не стал читать чтобы настроение с утра не портить. примеров в сети млн поискайте перепишите это пожалуйста.
__________________
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума   Ответить с цитированием
Старый 24.05.2018, 09:30   #3
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 23,766
Репутация: 5213
По умолчанию

полностью согласен со Станиславом.

Добавлю, что у меня вызывает большое сомнение, что в скрипте вообще логика адекватная. Ошибка в том, что есть блок ELSE, который работает неадекватно.

Смотрите, ваша функция срабатывает при клике на чекбоксах внутри rol_svet.
вначае проверяем, нажат ли первый чекбокс. Если нажат - выполняем запрос.
потом проверяем, нажат ли второй чекбокс.
Если нажат - выполняем запрос. а если не нажат (ветка ELSE) выполняется другой запрос.
Теперь, внимание, вопрос - когда будет выполняться код по ветке ELSE, в каком состоянии будет первый чекбокс ?
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 24.05.2018, 10:42   #4
Stanislav
Квадрокоптерист
Профессионал
 
Регистрация: 29.09.2007
Сообщений: 1,751
Репутация: 489
По умолчанию

Поменяйте хотя бы условие на это.
Код:

if($($(this)).is(':checked'))
  // checked
else
  //unchecked

Раз у вас чекбоксы, значит у вас может быть выбран 1 или 2 или просто 2 или просто 1 или и 1 и 2, почему бы Вам сначала не выбрать все чекбоксы как надо потом нажать кнопку, и уже по кнопке отправлять событие?
Установите как надо чекбоксы, пробегитесь по ним, соберите их состояния и одним запрос отправьте на сервер. И в php одним же запросом сделайте выборку из бд.

Например хотя бы так

Код:

var sList = "";
$('input[type=checkbox]').each(function () {
    var sThisVal = (this.checked ? "1" : "0");
    sList += (sList=="" ? sThisVal : "," + sThisVal);
});

А содержимое переменной уже отправите ajax. И в пыхе одним запросом сделайте выборку.
__________________
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 24.05.2018 в 10:56.
Stanislav вне форума   Ответить с цитированием
Старый 24.05.2018, 11:14   #5
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 243
Репутация: -23
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Теперь, внимание, вопрос - когда будет выполняться код по ветке ELSE, в каком состоянии будет первый чекбокс ?
Задумано в отключенном состоянии)
__________________
Еду медленно, но верно!
spoon100500 вне форума   Ответить с цитированием
Старый 24.05.2018, 11:16   #6
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 243
Репутация: -23
По умолчанию

Цитата:
Сообщение от Stanislav Посмотреть сообщение
А содержимое переменной уже отправите ajax.
Значение 1 или 0 откуда берем?
__________________
Еду медленно, но верно!
spoon100500 вне форума   Ответить с цитированием
Старый 24.05.2018, 11:44   #7
Stanislav
Квадрокоптерист
Профессионал
 
Регистрация: 29.09.2007
Сообщений: 1,751
Репутация: 489
По умолчанию

Цитата:
Сообщение от spoon100500 Посмотреть сообщение
Значение 1 или 0 откуда берем?
всмысле откуда, в моем примере 2 строчки кода в теле цикла, даже если не разбираетесь не ужели догадаться нельзя?
Код:

 var sThisVal = (this.checked ? "1" : "0");

__________________
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума   Ответить с цитированием
Старый 24.05.2018, 11:54   #8
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 243
Репутация: -23
По умолчанию

т.е. 0 это первый чекбокс 1 это второй?
__________________
Еду медленно, но верно!
spoon100500 вне форума   Ответить с цитированием
Старый 24.05.2018, 12:01   #9
Stanislav
Квадрокоптерист
Профессионал
 
Регистрация: 29.09.2007
Сообщений: 1,751
Репутация: 489
По умолчанию

Цитата:
Сообщение от spoon100500 Посмотреть сообщение
т.е. 0 это первый чекбокс 1 это второй?
нет это свойство checkbox
Код:

this.checked

возвращает true или false эта конструкция возвращает (тернарный оператор называется)
Код:

this.checked ? "1" : "0"

"преобразует" true и false в 1 и 0
__________________
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

Последний раз редактировалось Stanislav; 24.05.2018 в 12:22.
Stanislav вне форума   Ответить с цитированием
Старый 24.05.2018, 12:05   #10
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 243
Репутация: -23
По умолчанию

Ну то есть можно было так
Код HTML:
var sThisVal = (this.checked ? true : false);
__________________
Еду медленно, но верно!
spoon100500 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упоряддочить по колонкам чекбоксы ninja2 HTML и CSS 1 23.03.2016 13:40
Неактивные чекбоксы _dvr JavaScript, Ajax 12 17.09.2015 22:23
IE 8 чекбоксы tati89 HTML и CSS 4 13.08.2014 16:09
Столбцы и чекбоксы Lamo Microsoft Office Excel 2 27.07.2013 18:34
чекбоксы (делфи) NewLamer&Programer Помощь студентам 1 12.01.2013 13:48


03:03.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru