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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: jquery validate & checkbox group

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: должен быть отмечен хотя бы 1 чекбокс
Jerry
Отправлено: 08 Июня, 2010 - 10:13:35
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Всем доброго дня, возникла следующая проблема:

в форме есть группа чекбоксов:

CODE (html):
скопировать код в буфер обмена
  1. <div id="itemsblock">
  2. <input name="items" type="checkbox" value="item1" />1
  3. <input name="items" type="checkbox" value="item2" />2
  4. <input name="items" type="checkbox" value="item3" />3
  5. </div>


Проверка формы осуществляется плагином jquery validate.

CODE (javascript):
скопировать код в буфер обмена
  1. rules: {items: {required: "#itemsblock:checked", minlength: 1}}


но если написать такое имя у чекбоксов, name="items[]". Чтобы получить их потом в $_POST['items'] то проверка уже не работает Недовольство, огорчение
пробовал в проверке написать так -
CODE (javascript):
скопировать код в буфер обмена
  1. rules: {items[]: {required: "#itemsblock:checked", minlength: 1}}


тоже не работает... отдельно переделывать все проверки и писать не через этот плагин очень не хочется ((((

Может быть кто то сталкивался с таким и сможет помочь?
Как написать проверку группы чекбоксов с этим плагином?

(Отредактировано автором: 08 Июня, 2010 - 10:14:08)

 
 Top
JustUserR
Отправлено: 08 Июня, 2010 - 14:51:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Jerry пишет:
Но если написать такое имя у чекбоксов, name="items[]". Чтобы получить их потом в $_POST['items'] то проверка уже не работает
Указанная схема не будет работать не поскольким причинам - во-первых использованием такого синтаксиса как items[]: не является верным с точки зрения JS и подлежит взятию в кавычки с точки зрения ассоциативного массива - а во-вторых имена объетов в DOM-модели также не должны иметь имена с квадратными скобками
Как вариант решения можно оставить имя таким и обращаться по идентификатору ID объекта - например сделать определенный его формат для группы флажков и делать проверку


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Viper
Отправлено: 09 Июня, 2010 - 12:40:44
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1. required: "#itemsblock:checked"

чушь написали. как у блочного элемента может быть свойство checked ?
если уж и писать селектор то как-то так
CODE (htmlphp):
скопировать код в буфер обмена
  1. #itemsblock input:checked


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Jerry
Отправлено: 09 Июня, 2010 - 15:31:17
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




видимо надо переписать и делать как посоветовал JustUserR проверку выбора через id...

только вот пока не представляю как эту проверку сделать с плагином вместе...
можете привести какой нибудь пример как встроить эту проверку чекбоксов по id?

вот всё те же чекбоксы, плюс добавл к ним id

CODE (html):
скопировать код в буфер обмена
  1. <div id="itemsblock">
  2. <input id="item1" name="items" type="checkbox" value="Значение1" />1
  3. <input id="item2" name="items" type="checkbox" value="Значение2" />2
  4. <input id="item3" name="items" type="checkbox" value="Значение3" />3
  5. </div>


js для проверки получается такой:

CODE (javascript):
скопировать код в буфер обмена
  1. $(document).ready(function(){
  2. $("#form1").validate({
  3.     focusInvalid: false,
  4.     focusCleanup: true,
  5.  
  6.     rules: {items: {required: "#itemsblock:checked", minlength: 1}},
  7.     messages: {items: "Нужно выбрать хотя бы один пункт"}
  8.  
  9.         });
  10.  
  11. });


#itemsblock:checked - работает точно так же как "#itemsblock input:checked", хотя вместе с input может быть и правильнее...

с проверкой всё ок, а вот в PHP данные об отмеченых чекбоксах не могу... Недовольство, огорчение(

(Отредактировано автором: 09 Июня, 2010 - 16:12:07)

 
 Top
Viper
Отправлено: 10 Июня, 2010 - 07:49:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Jerry http://api[dot]jquery[dot]com/checked-selector/
а конкретнее первая строка
Цитата:
The :checked selector works for checkboxes and radio buttons. For select elements, use the :selected selector.

поэтому не пишите чушь. проверяя "div attr=checked"

если хотите передать несколько значений чекбоксов, то задайте им имя как массив name="chk_group_1[]" к примеру.

для первого чекбокса в группе пишете атрибут
CODE (htmlphp):
скопировать код в буфер обмена
  1. validate="required:true, minlength:1"


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Jerry
Отправлено: 10 Июня, 2010 - 09:23:32
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Спасибо за ответ. Уже пробовал задавать имя как массив, но не работает с массивом вообще проверка у меня... вот так пробовал имена задать:
(если убрать массив, то работает, а с массивом - нет)

CODE (html):
скопировать код в буфер обмена
  1. <div id="itemsblock">
  2. <input id="item1" name="items[]" type="checkbox" value="Значение1" validate="required:true, minlength:1"/>1
  3. <input id="item2" name="items[]" type="checkbox" value="Значение2" />2
  4. <input id="item3" name="items[]" type="checkbox" value="Значение3" />3
  5. </div>


Может быть опять что-то не то пишу? Недовольство, огорчение
 
 Top
JustUserR
Отправлено: 10 Июня, 2010 - 11:26:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Jerry пишет:
Видимо надо переписать и делать как посоветовал JustUserR проверку выбора через id...
Такой способ решение проблемы достаточно очевидный и притом также неплохо поддается автоматизации - например можно динамически сгенерировать соответсвтующие элементы формы и присвоить им ID по определенному шаблону - и работать с ними фактически как с массивом за счет написания фукнци которая будет в DOM-модели выбирать группу флажком по шаблонному имени


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Viper
Отправлено: 11 Июня, 2010 - 07:27:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




вообще решение в лоб это без использования плагина валидации

CODE (javascript):
скопировать код в буфер обмена
  1. if ($('#itemsblock input:checked').length < 1) { ...


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
JustUserR
Отправлено: 11 Июня, 2010 - 16:42:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Viper пишет:
Вообще решение в лоб это без использования плагина валидации
В таком случае надо проверить чтобы jquery при обращении к группе элементов через класс стиля - не использовал в дальнейшем их имена в for-in циклах иначе это может вызвать аналогичную ошибку


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Jerry
Отправлено: 01 Июля, 2010 - 09:51:13
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Забыл сразу написать, вдруг кому-нибудь ещё пригодится.
Проблема решалась просто - всего то нужно было поставить кавычки - 'items[]'

Обсуждений такого случая много нашел, и странно, что нигде в примерах использования плагина этого нет. Ответ нашел только где-то глубоко в обсуждениях на каком то из англоязычных форумов...

CODE (html):
скопировать код в буфер обмена
  1. <input name="items[]" type="checkbox" value="Значение1" />1
  2. <input name="items[]" type="checkbox" value="Значение2" />2
  3. <input name="items[]" type="checkbox" value="Значение3" />3


CODE (javascript):
скопировать код в буфер обмена
  1. rules: {'items[]': {required: true, minlength:  1}
 
 Top
JustUserR
Отправлено: 01 Июля, 2010 - 14:15:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Jerry пишет:
Проблема решалась просто - всего то нужно было поставить кавычки - 'items[]'
Дело в том что структура данных типа JSON которая используется внутри функции в вашем плагине на самом деле является описание анонимного хеш-массива - и его ключи вообще-то могут содержать произвольные символы строки Однако в таком случае указанный хеш-массив перестает быть полным аналогом JS-объекта и не поддерживает точечную форму обращения к элементам - и по этой причине использование таких названий в DOM-моделе впринципе разрешено но может привести к ошибкам в некоторых случаях


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Leprik
Отправлено: 06 Октября, 2010 - 13:23:33
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Вот поэтому всегда стоит использовать кавычки для всех значений JSON массивов настройки jQuery плагинов.

jQuery 1.3.x -> 1.4.x и JSON
http://habrahabr[dot]ru/blogs/jquery/83892/
 
 Top
JustUserR
Отправлено: 07 Октября, 2010 - 00:13:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Leprik пишет:
Вот поэтому всегда стоит использовать кавычки для всех значений JSON массивов настройки jQuery плагинов.
В языках программирования в которых реализована поддержка переменных с вариативным именем использование которых связано с системной ассоциативных массивов - как правило существует принцип индифферинциации позвляющий использовать идентификаторы записанные по определенному шаблону в качестве имени переменой - в то время как все остальные применяются исключительно в трактоварии ключа


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB