Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2018, 06:19   #1
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 406
По умолчанию Чекбоксы и 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, 07:41   #2
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

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

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

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

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

Поменяйте хотя бы условие на это.
Код:
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 в 09:56.
Stanislav вне форума Ответить с цитированием
Старый 24.05.2018, 10:14   #5
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 406
По умолчанию

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

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

Цитата:
Сообщение от spoon100500 Посмотреть сообщение
Значение 1 или 0 откуда берем?
всмысле откуда, в моем примере 2 строчки кода в теле цикла, даже если не разбираетесь не ужели догадаться нельзя?
Код:
 var sThisVal = (this.checked ? "1" : "0");
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 24.05.2018, 10:54   #8
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 406
По умолчанию

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

Цитата:
Сообщение от spoon100500 Посмотреть сообщение
т.е. 0 это первый чекбокс 1 это второй?
нет это свойство checkbox
Код:
this.checked
возвращает true или false эта конструкция возвращает (тернарный оператор называется)
Код:
this.checked ? "1" : "0"
"преобразует" true и false в 1 и 0
Я часть той силы, что вечно хочет зла, но вечно совершает благо..

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упоряддочить по колонкам чекбоксы ninja2 HTML и CSS 1 23.03.2016 12:40
Неактивные чекбоксы _dvr JavaScript, Ajax 12 17.09.2015 21: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