Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Избитые чекбоксы на аяксе
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Избитые чекбоксы на аяксе

Страниц (1): [1]
 

1. hardcore - 22 Сентября, 2015 - 00:06:51 - перейти к сообщению
Доброй ночи, случайный гость.
Будь любезен, подскажи, как осуществить такую тему:

Есть "туева хуча" чекбоксов. И, чтобы не грузить форму, да и для удобства пользователя, хочу, чтобы при нажатии на чекбокс передавался нужный мне параметр (0 либо 1, разумеется), который хранится в базе в таком же виде, и быстренько находил свою ячеечку в базе, где бы мог спокойно себе дальше жить. В аяксе я пока ни в зуб ногой. Принцип понимаю, язык пока не знаю.
В общем, заранее благодарю, милсдарь.
2. hardcore - 22 Сентября, 2015 - 10:11:19 - перейти к сообщению
Неужели никто не знает, как это сделать? Огорчение
3. Viper - 22 Сентября, 2015 - 13:17:59 - перейти к сообщению
Подключаете jQuery
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <div class="checkboxes"><input type="checkbox" name="chk[]" value="" /><label>Lorem ipsum</label></div>


CODE (javascript):
скопировать код в буфер обмена
  1. $('.chk').change(function(){
  2.         var chk = $(this);
  3.  
  4.         if (chk.is(':checked')) { // Если отмечено
  5.                 // Отсылаем запрос на сервер методом POST
  6.                 $.post('index.php', $('.checkboxes input').serialize(), function(response){
  7.                         alert('Ok');
  8.                 });
  9.         }
  10. });


Как-то так.
Подробнее смотрите в api:
http://api[dot]jquery[dot]com/jQuery[dot]post/
http://api[dot]jquery[dot]com/serialize/

PS!
hardcore пишет:
И, чтобы не грузить форму
не привыкайте к говнокоду.
4. SAD - 22 Сентября, 2015 - 15:22:33 - перейти к сообщению
не прокатит, так как автору нужно, чтобы ушли 0 или 1. сериалайз не пашет для чекбоксов
и ради 3 строчек чистого js незачем прикручивать jquery
5. hardcore - 22 Сентября, 2015 - 16:32:12 - перейти к сообщению
SAD пишет:
не прокатит, так как автору нужно, чтобы ушли 0 или 1. сериалайз не пашет для чекбоксов
и ради 3 строчек чистого js незачем прикручивать jquery


Именно!
Если обработка формы целиком - говнокод, то избегаю, как могу.

По сабжу: насколько я понимаю принцип, каждый чекбокс, по сути, должен сабмитить свой name и value в php-файл, где записывает полученное значение в колонку (название колонки аналогично названию чекбокса). За изучение скриптов я только взялся, а данный функционал нужен раньше, чем я успею все понять. В общем, нельзя ли написать такой сценарий, к которому бы обращался чекбокс на онклик?
6. Panoptik - 22 Сентября, 2015 - 16:42:46 - перейти к сообщению
даю практически готовый ответ

http://www[dot]sitepoint[dot]com/forums/[dot][dot][dot]heckbox-onchange
можете не благодарить
7. hardcore - 22 Сентября, 2015 - 19:05:07 - перейти к сообщению
Panoptik пишет:
даю практически готовый ответ

http://www[dot]sitepoint[dot]com/forums/[dot][dot][dot]heckbox-onchange
можете не благодарить


Благодарю, но делал иначе.

Короче, мужики. Вот реально готовое решение (не знаю, насколько это говнокод в JS, но работает просто ВАХ!)
CODE (javascript):
скопировать код в буфер обмена
  1. $(document).ready(function () {
  2.  
  3.  
  4.             $("input").click (function () {
  5.  
  6.                 var id = $(this).parent().attr("id");
  7.                 var table = $(this).parent().parent().parent().attr("id");
  8.  
  9.                 if ($(this).attr("checked")) {
  10.  
  11.                     $.ajax ({
  12.                         url: "check.php",
  13.                         type: "POST",
  14.                         data: {id: id, table: table, check: 1}
  15.  
  16.                     });
  17.  
  18.                 } else {
  19.  
  20.                     $.ajax ({
  21.                         url: "check.php",
  22.                         type: "POST",
  23.                         data: {id: id, table: table, check: 0}
  24.  
  25.                     });
  26.                 }
  27.  
  28.             });
  29.  
  30.         });


Ну там с парентами намутил потому что у каждого блока чекбоксов своя таблица, ну и передавал, в какую записывать.

Вот как выводятся:

PHP:
скопировать код в буфер обмена
  1. while($i<$array['count']) {
  2.             echo '<li id="' . $array['id'][$i] . '">
  3.                <input '.$check.' type="checkbox" id="' . $array['id'][$i] . '"/>' . $array['names'][$i] . '
  4.                </li>';
  5.             $i++;
  6.         }
  7.  


Тут в общем-то фишка в том, что берется айдишник родительского элемента. Хотя, тут вроде можно и проще было сделать: просто взять айдишник инпута.
В общем, все проще, чем казалось.
8. Viper - 22 Сентября, 2015 - 20:21:42 - перейти к сообщению
hardcore пишет:
Если обработка формы целиком - говнокод, то избегаю, как могу.
не использовать форму вообще - вот это говнокод.
(Добавление)
SAD пишет:
сериалайз не пашет для чекбоксов
йо ли? Может руки не под то заточены?
9. SAD - 22 Сентября, 2015 - 21:04:05 - перейти к сообщению
Давай. Научи меня сериализовать форму)

Цитата:
Values from checkboxes and radio buttons (inputs of type "radio" or "checkbox") are included only if they are checked


(Добавление)
hardcore пишет:
Короче, мужики. Вот реально готовое решение


Это п... Ц а не решение

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $("input").click (function () {
  3. var $this = $(this);
  4.  
  5.                 $.ajax ({
  6.                         url: "check.php",
  7.                         type: "POST",
  8.                         data: {
  9. id: $this.attr('id'),
  10. table: $this.closest('table').attr('id'),
  11. check: +$this.is(':checked')
  12. }
  13.  
  14.                     });
  15.  
  16.             });
  17.  
10. Viper - 23 Сентября, 2015 - 02:51:13 - перейти к сообщению
SAD неужели? А то не знал Улыбка
11. hardcore - 23 Сентября, 2015 - 13:00:36 - перейти к сообщению
SAD пишет:
Это п... Ц а не решение

CODE (javascript):
скопировать код в буфер обмена
 
$("input").click (function () {
var $this = $(this);
 
                $.ajax ({
                        url: "check.php",
                        type: "POST",
                        data: {
id: $this.attr('id'),
table: $this.closest('table').attr('id'),
check: +$this.is(':checked')
}
 
                    });
 
            });
 


Так и в чем тут проблема то?
12. SAD - 23 Сентября, 2015 - 13:55:56 - перейти к сообщению
тут. миллион parent
CODE (javascript):
скопировать код в буфер обмена
  1. $(this).parent().parent().parent().attr("id")


тут дублирование кода

CODE (javascript):
скопировать код в буфер обмена
  1. if ($(this).attr("checked")) {
  2.  
  3.                     $.ajax ({
  4.                         url: "check.php",
  5.                         type: "POST",
  6.                         data: {id: id, table: table, check: 1}
  7.  
  8.                     });
  9.  
  10.                 } else {
  11.  
  12.                     $.ajax ({
  13.                         url: "check.php",
  14.                         type: "POST",
  15.                         data: {id: id, table: table, check: 0}
  16.  
  17.                     });
  18.                 }


Усли бы у Вас был выпадающий список с 10 значениями вместо чекбокса, у Вас было бы 10 условий и продублированного кода?
13. Panoptik - 23 Сентября, 2015 - 17:53:02 - перейти к сообщению
Браво
14. hardcore - 24 Сентября, 2015 - 12:38:34 - перейти к сообщению
SAD пишет:
тут. миллион parent
CODE (javascript):
скопировать код в буфер обмена
  1. $(this).parent().parent().parent().attr("id")


тут дублирование кода

CODE (javascript):
скопировать код в буфер обмена
  1. if ($(this).attr("checked")) {
  2.  
  3.                     $.ajax ({
  4.                         url: "check.php",
  5.                         type: "POST",
  6.                         data: {id: id, table: table, check: 1}
  7.  
  8.                     });
  9.  
  10.                 } else {
  11.  
  12.                     $.ajax ({
  13.                         url: "check.php",
  14.                         type: "POST",
  15.                         data: {id: id, table: table, check: 0}
  16.  
  17.                     });
  18.                 }


Усли бы у Вас был выпадающий список с 10 значениями вместо чекбокса, у Вас было бы 10 условий и продублированного кода?


А, ну это все бы попровилось по ходу изучения JS. Главное, что я разобрался и в целом-то правильно.

 

Powered by ExBB FM 1.0 RC1