Неопределённое состояние чекбокса. Как отметить все чекбоксы Что такое чекбокс в телефоне

  • 08.03.2024

Продолжаю серию статей по улучшению интерфейсных элементов. В этом раз пришла очередь поговорить о чекбоксах. Теперь можно получать .

Чекбоксы

Чекбоксы (checkboxes) - изначально создавались как элементы группового выбора. Т.е. предназначались для обозначения какой-то группы из элементов для последующих групповых действий с ними.

Хорошие и настоящие чекбоксы есть в Gmail

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

Проблемы и решения при использовании чекбоксов

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

Использование чекбоксов для бинарных состояний

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

Такой чекбокс ничего не объясняет. Тут не понятно будет ли доставка почтой или мне придется ехать за своей покупкой. Гораздо логичней в этом случае будет использовать радиобаттон для выбора нужной опции. Переделываем.

Теперь стало все стало гораздо понятней

Использование чекбоксов для включения опций

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

Чекбоксы - это не кнопки. Это элементы предназначенные для групповых операций. Нажатие на чекбокс не должно приводить к какому либо действию. Для визуального определения включенных и невключенных опций из списка прекрасно подойдет цветовая индикация.

В приведенном выше примере следовало бы выбрать несколько опций и нажать кнопку «Применить». Такой вариант жизнеспособен, но не очень удобен. Что же делать? Я предлагаю такое решение:

Включение опции в одном из клиентских проектов

Здесь прекрасно видно состояние опции (включена или нет). Сразу видно переключение и решена еще одна проблема о которой мы поговорим дальше. Подобный переключатель пришел из интерфейса Айфона и является достойным аналогом простого чекбокса.

Малый размер кликабельной области

Согласно закону Фиттса, чем меньше элемент, тем труднее его использовать. Эту проблему можно наблюдать не только в чекбоксах. Это одна из главных проблем многих контролов.

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

Какие есть выходы и приемы?

Тем самым показав кликабельную область.

Чекбокс-кнопка на сайте Ostrovok.ru

Увеличив этим область клика.

Чекбокс-метка на одном из клиентских проектов

3. Превратить чекбокс в переключатель. Об этом я писал выше.

«Выбрать все» и «убрать все»

Для удобства работы с большим количеством чекбоксов в интерфейсе должны присутствовать опции «Выбрать все чекбоксы» и «Снять все чекбоксы». В противном случае работа с таким интерфейсом стает очень нудной и долгой. Представьте, что вам нужно выбрать хотя бы 10 пунктов из 12 имеющихся в списке. Это гораздо проще сделать выбрав все и сняв ненужные опции.

Выводы

Чекбоксы изначально создавались как инструменты группового выбора. И использовать их для чего-то еще в изначальном виде не стоит. Однако после некоторого тюнинга и соблюдения простых рекомендаций их можно превратить в удобный инструмент для вашего пользователя.

В предыдущих и следующих сериях
  • . Почему их не стоит использовать. А если использовать, то как?
  • . Простой выбор без выбора.
  • . Как должны работать поля ввода с разными типами данных.

Чекбокс может иметь только два состояния: отмеченный и неотмеченный. Они могут иметь любое значение, но при отправке формы либо передавать его (отмеченное состояние) либо не передавать (неотмеченное состояние). По умолчанию состояние неотмеченное. В HTML можно управлять чекбоксом следующим образом:

Визуально чекбокс может быть в трех состояниях: отмеченный, неотмеченный и неопределённый. Они могут выглядеть следующим образом:

Несколько замечаний о чекбоксах:

Вы не можете сделать чекбокс неопределённым в HTML. Нет специального атрибута. Хотя есть свойство чекбокса, которое можно менять в JavaScript:

Var checkbox = document.getElementById("some-checkbox"); checkbox.indeterminate = true;

или в jQuery:

$("#some-checkbox").prop("indeterminate", true); // prop введен в jQuery 1.6+

Неопределенное состояние является только визуальным эффектом. Чекбокс по-прежнему в отмеченном или неотмеченном состоянии. Значит, что визуальное неопределенное состояние маскирует реальное состояние чекбокса.

Как и сам чекбокс, его неопределенное состояние выглядит по-разному в разных браузерах. Вот пример в Opera 11.50 на Mac:

И зачем это нужно?

При разработке проектов часто возникает необходимость в структуре чекбоксов. Каждый чекбокс может иметь наследников чекбоксов. Если все наследники чекбоксы отмечены, то и родительский чекбокс может быть отмеченным. Если ни один наследник не отмечен - то и родитель не отмечен. Но если хотя бы один наследник отмечен, то родительский чекбокс находится в неопределённом состоянии (что может означать - "частично отмечен").

Пример кода не является идеалом - проверяется только один уровень для введения неопределенного состояния.

Можно также организовать переключение между состояниями при нажатии кнопки мыши на чекбоксе:

Var $check = $("input"), el; $check .data("checked",0) .click(function(e) { el = $(this); switch(el.data("checked")) { // Неотмеченное состояние, переходим в неопределённое case 0: el.data("checked",1); el.prop("indeterminate",true); break; // Неопределённое состояние, переходим в отмеченное case 1: el.data("checked",2); el.prop("indeterminate",false); el.prop("checked",true); break; // Отмеченное состояние, переходим в неопределенное default: el.data("checked",0); el.prop("indeterminate",false); el.prop("checked",false); } });

Иногда при работе с формой возникает ситуация, что для удобства пользователя надо одновременно выбрать все чекбоксы в форме. Для этого можно воспользоваться дополнительным чекбоксом (Отметить/Снять) и небольшим фрагментом javascript кода.

С помощью данного кода можно:

1. Отметить любое количество чекбоксов.

2. Отметить все чекбоксы щелкнув только по одному специальному чекбоксу.

3. Отметить и снять чекбоксы в один клик мыши.

Использование:

Создать html код:

Добавить в форму чекбокс:

Прописать javascript-код перед закрывающимся тегом /head:

< aa.elements.length; i++){ aa.elements[i].checked = checked; } }

В итоге получится (демо с данным примером в начале статьи):

check/uncheck checbox checked=false; function checkedAll (frm1) { var aa= document.getElementById("frm1"); if (checked == false){ checked = true } else{ checked = false } for (var i =0; i < aa.elements.length; i++) { aa.elements[i].checked = checked; } } Выбор/снятие всех чекбоксов

Чекбокс 1 Чекбокс 2

Нажмите для отмены/снятия чекбоксов

Как отметить все чекбоксы? Воспользуемся jquery. Сразу предупреждаю, что в этом нет ничего сложного, не пугайтесь обилия кода в уроке. В основном это один и тот же код, повторённый несколько раз с небольшими изменениями.

Как отметить все чекбоксы с помощью ссылок

Чтобы отметить все чекбоксы, сделаем к ним 2 ссылки «отметить все» и «сбросить все»

















У ссылок есть атрибут rel=»form». Он определяет, для каких чекбоксов работает скрипт. В данном случае, для любого объекта с id=»example_group1″ Теперь напишем код, который будет отмечать все чекбоксы:



// Активируем все чекбоксы
//При клике на ссылку "Отметить все чекбоксы", активируем checkbox
$("a").click(function() {

$("#" + $(this).attr(‘rel’) + " input:checkbox:enabled").attr(‘checked’, true);
//Если вам нужно отмечать и неактивные чекбоксы (disabled), то предыдущая строчка должна выглядеть так:

return false;
});

// Снимаем все отметки
$("a").click(function() {

//Если должны обрабатываться неактивные чекбоксы, опять исключаем параметр:enabled
//$("#" + $(this).attr(‘rel’) + " input:checkbox").attr(‘checked’, true);
return false;
});
});

Как отметить все чекбоксы с помощью кнопок




















$(document).ready(function() { // Выбор всех //При клике по кнопке "отметить все" активируем чекбоксы $("#example_all").click(function() { $("#" + $(this).attr(‘rel’) + " input:checkbox:enabled").attr(‘checked’, true); return false; }); // При клике по кнопке "сбросить все" убираем отметки $("#example_noone").click(function() { $("#" + $(this).attr(‘rel’) + " input:checkbox:enabled").attr(‘checked’, false); return false; }); });

Как видите, всё почти так же, как и в способе с ссылками. Разница только в том, что ссылки мы различаем по параметру href, а кнопки по id

Как отметить все чекбоксы с одного главного чекбокса

Так же можно повесить отметку всех чекбоксов на один чекбокс:




















$(document).ready(function() {
// Выбор всех
//При клике по кнопке "отметить все" активируем чекбоксы
$("#example_all").click(function() {
$("#" + $(this).attr(‘rel’) + " input:checkbox:enabled").attr(‘checked’, true);
return false;
});

// При клике по кнопке "сбросить все" убираем отметки
$("#example_noone").click(function() {
$("#" + $(this).attr(‘rel’) + " input:checkbox:enabled").attr(‘checked’, false);
return false;
});
});

Учтите, что, ради избегания рекурсии, нужно ключевой чекбокс сделать не таким как все. Это можно реализовать с помощью присвоения класса для всех чекбоксов, кроме ключевого. В примере таким классом является.example_check.

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

Чекбокс: обычная галочка

Наверняка каждый из нас встречался в жизни с таким символом, как галочка. Это обозначение должно быть нам знакомо, начиная еще со школьной скамьи. Этим знаком отмечают правильный вариант ответа при проведении тестирования. Также галочки используются при заполнении различных анкет. Сегодня, когда пользователи множество действий совершают через интернет, без галочек вообще никуда не деться. Даже простейшая процедура регистрации на каком-либо сайте требует отметить некоторые пункты. Сегодня как-никогда развита интернет-торговля. Пользователь при создании заказа может отметить только те пункты, которые интересуют егов особенности. Еще очень часто при установке компьютерных игр пользователю предлагается выбрать дополнительное программное обеспечение. В данном случае нужно будет тоже сделать выбор. Так вот, чекбоксы как раз и являются теми самыми галочками, которые используются на веб-страницах.

Использование чекбоксов при создании сайтов

Разработчики сайтов несколько шире видят данный элемент. Ведь создать его намного сложнее, чем просто кликнуть мышкой по квадратику. Разрабатываются сайты при помощи гипертекстового языка разметки. В профессиональной среде такой язык называют HTML. Чтобы создать в этом языке такую галочку необходимо написать определенный код. Как же на самом деле создаются чекбоксы? HTML представляет собой специализированный элемент, который является полем, наделенным типом «чекбокс». Пишется он следующим образом:

Чекбокс: принцип функционирования

Данный элемент работает по довольно простому принципу: либо отрицание, либо утверждение. Если в поле отмечена галочка, то браузер отправит переменную, которая отправит для обработки имя поля на сервер. Если же галочка не будет отмечена, то сервер ничего не получит. У данного элемента имеется атрибут, который имеет значение value. Данный атрибут является необязательным. Разработчики добавляют к тегу специальный атрибут, который указывает на галочку, поставленную по умолчанию. Называется этот атрибут checked, что в переводе с английского означает «отмечено».

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

Зависимые чекбоксы

В том случае, если необходимо выбрать только один вариант из множества представленных, то можно использовать другие элементы, такие как радиокнопки. В некоторых случаях используется такой тип, как зависимые чекбоксы. Совместно с языком программирования JavaScriptHTML позволяет сделать один главный флажок, от которого будут зависеть все остальные. При нажатии на данный элемент может быть отмечено сразу несколько чекбоксов. Используется такое довольно редко, поскольку это противоречит правилу отметки галочек.Чекбоксы, как и другие теги в HTML, имеют свои признаки. Какими же они могут быть? Выше уже говорилось об атрибуте для предварительной отметки флажка checked. Поскольку в одной форме у чекбоксов должны быть разные имена, необходим атрибут name. Именно этот атрибут и идентифицирует каждый флажок по отдельности. Чтобы задать значение, которое будет отправлено на сервер, необходимо использовать атрибут value. Необходимо отметить, что чекбоксы представляют собой графические элементы управления, которые применяются преимущественно в различных формах. Работают они в трех режимах: выбранный, не выбранный и неопределенный.

Использование в таблицах

Такой элемент как «чекбокс» может использоваться не только в HTML при разработке веб-приложений и сайтов. Данный элемент также используется в программном обеспечении, например, в программах 1C. На предприятии имеется множество различных составляющих и при работе с документацией необходимо все это отмечать. Например, при помощи чекбокса можно отмечать список клиентов или перечень складских запасов. В каких еще программах может быть использован данный элемент? Всем известна программа Exel от компании Microsoft, которая зачастую используется в качестве альтернативы 1C. Здесь принцип работы данного флажка следующий: если галочка отмечена, то данный элемент возвращает истинное значение. Если галочка снята, то данный элемент возвращает ложное значение. Чтобы вставить чекбокс в документ, необходимо включить специальную вкладку для разработчика. Это можно сделать при помощи параметров, которые отличаются в каждой версии программы Exel.

Как же можно найти нужные настройки? Для этой цели всегда можно воспользоваться поисковой системой или справкой. Когда данная вкладка будет включена, то можно будет вставлять данный элемент, используя команду «Вставить» из пункта «Элементы управления». Тут необходимо обратить внимание на тот момент, что в меню также содержатся элементы ActiveX, которые расположены под необходимыми элементами формы. Здесь также имеются чекбоксы. В чем же заключается разница?Для использования элементов ActiveX необходим встроенный язык программирования VBA, которым владеют немногие. Обыкновенные флажки можно привязать сразу к определенной ячейке в документе. После того, как все чекбоксы в Exel будут проставлены, они станут отмеченными по умолчанию. Если кликнуть мышкой в любом месте документа, отметка будет снята. Чтобы выполнить обратное выделение, необходимо кликнуть по флажку правой кнопкой мыши. Левая кнопка снимает или устанавливает галочку.