Commited: 50+ воркшопів з ТОПами тестування: M.Bolton, G.Bahmutov, T.King, R.Desyatnikov, J.Bach. Лише за $40 на рік та економія $15 до 20 квітня
×Закрыть

Выжить без JavaScript: выделенные чекбоксы

Была у меня такая стандартная задача.

Есть хтмл-форма. В ней таблица, в начале каждой строки есть чекбоксик, выделив который, мы помечаем эту строку на удаление. Затем по нажатию кнопки «Удалить выделенные» помеченные строки удаляются. Значение каждого чекбоксика — уникальное, и однозначно соответствует удаляемой строке.

Решение 1: JavaScript.

В обработчик события onclick кнопки «Удалить выделенные» пишем функцию на JavaScript, которая а) обходит все чекбоксы и собирает инфу об их выделенности, б) делает из значений выделенных чекбоксов список (просто строку с их перечислением через запятую), в) сохраняет эту строку в hidden-поле. Получается примерно так:

<input type="submit" name="delete" value="Удалить выделенные" onclick="document.getElementById('selected').value=checkedValues('FormName'');"/> 

<input type="hidden" name="selected" id="selected" value=«" />

Здесь checkedValues() - эта та самая рукотворная функция на JavaScript.

На серверной стороне (а там стоит РНР) преобразуем список в массив:

<? $selected = explode(",", $selected); ?>

Что мне не нравится в этом решении — нестандартность. Скажем, нет у броузера включённого JavaScript или библиотека с функциями недозагрузилась/пропала/неподключена — и всё, попа, функциональность не работает. Поэтому появилось

решение 2: РНР + HTML.

Матчасть: в результате этого кода будет а) создан переменная типа массив, б) следующему её элементу (в нашем случае первому, так как массив пустой) будет присвоено значение 4.

<? $arr_example = array(); $arr_example[] = 4; ?>

То бишь «[]» означает «возьми следующий элемент». Данный простой код часто усложняют таким образом (получается то же, только грязнее):

<? $arr_example = array(); $arr_example[sizeof($arr_example)] = 4; ?>

Так вот вернёмся к теме. Можно смело удалить обработчик onclick — за него всё сделает РНР и хтмл: будем использовать хитрое наименование переменных. Дело в том, что если назвать все хтмл-чекбоксы так:

<input type="checkbox" name="selected<strong>[]</strong>" value="<?=$id?>"/>

то после субмита формы на стороне сервера появится переменная $selected типа «массив», проиндексированная последовательно (т.е. можно по ней пройтись циклом FOR, а не FOREACH, что есть быстрее). Более того, любимая explode() тут уже не понадобится. Ура!

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

👍НравитсяПонравилось0
В избранноеВ избранном0
Подписаться на автора
LinkedIn

Похожие статьи




Підписуйтесь: iTunes | Google Podcast | YouTube


2 комментария

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Странно, что я раньше не видел на php.net раздела ЧАВО...Суперский мануал! Спасибо за ссылку.

Трудно в этом мире придумать что-то действительно новое — http://www.php.net/manual/ru/f...

Подписаться на комментарии