Как создать флажок с кликабельным ярлыком?


Ответы:


1917

Метод 1: обернуть метку

Оберните флажок внутри labelтега:

<label><input type="checkbox" name="checkbox" value="value">Text</label>

Метод 2: Используйте for атрибут

Используйте forатрибут (соответствует флажку id):

<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id">Text</label>

ПРИМЕЧАНИЕ : ID должен быть уникальным на странице!

объяснение

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

Выдержка из w3.org (с моим акцентом):

[Атрибут for] явно связывает определяемую метку с другим элементом управления. Если присутствует, значение этого атрибута должно совпадать со значением атрибута id какого-либо другого элемента управления в том же документе. Когда отсутствует, определяемая метка связана с содержимым элемента.

Чтобы неявно связать метку с другим элементом управления, элемент управления должен находиться внутри содержимого элемента LABEL . В этом случае LABEL может содержать только один элемент управления. Сама метка может быть расположена до или после ассоциированного элемента управления.

Использование этого метода имеет ряд преимуществ перед for:

  • Нет необходимости присваивать idкаждому флажку (отлично!).

  • Нет необходимости использовать дополнительный атрибут в <label>.

  • Кликабельная область ввода также является кликабельной областью метки, поэтому нет двух отдельных мест для нажатия, которые могут контролировать флажок - только одно, независимо от того, насколько далеко друг от друга <input>и фактический текст метки, и независимо от того, какой тип CSS вы используете. применить к этому.

Демо с некоторыми CSS:

label {
 border:1px solid #ccc;
 padding:10px;
 margin:0 0 10px;
 display:block; 
}

label:hover {
 background:#eee;
 cursor:pointer;
}
<label><input type="checkbox" />Option 1</label>
<label><input type="checkbox" />Option 2</label>
<label><input type="checkbox" />Option 3</label>


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

1
Если кто-то может объяснить комментарий, оставленный @John, пожалуйста, сделайте, потому что это не имеет никакого смысла для меня вообще.
Уэсли Мёрч

16
@ Джон, это руководство по разметке специально для начальной загрузки. Если вы не используете фреймворк или используете другой, это должно быть вполне нормально. Спасибо за ответ.
Уэсли Мёрч

3
@John. На странице, на которую вы ссылаетесь, примеры начальной загрузки, все флажки переноса с меткой, я не вижу никаких предупреждений, которые вы указываете вообще, возможно, они больше не относятся к последней загрузке.
user2144406

2
Как я узнал сегодня, не смешивайте Метод 1 и Метод 2. Если вы поместите флажок в метку И включите for, то нажатие на метку не вызовет флажок.
BBlake

50

Просто убедитесь, что метка связана с вводом.

<fieldset>
  <legend>What metasyntactic variables do you like?</legend>

  <input type="checkbox" name="foo" value="bar" id="foo_bar">
  <label for="foo_bar">Bar</label>

  <input type="checkbox" name="foo" value="baz" id="foo_baz">
  <label for="foo_baz">Baz</label>
</fieldset>

1
Меня смущает тот факт, что вы дали двум флажкам одно и то же имя и разные значения. Это специально?
LarsH

2
@LarsH - Да, именно так вы создаете группы флажков.
Квентин

Спасибо. Я смотрел на w3.org/wiki/HTML/Elements/input/checkbox, и это не помогло в этом отношении.
LarsH

2
С PHP, разве что $ _POST ['foo'] всегда будет иметь одно из двух значений максимум одновременно? Даже если оба проверены. Что такое группа флажков?
Джеромей

2
@JeromeJ: Для PHP , чтобы правильно обращаться с этим, вы должны добавить квадратные скобки названия, например: <input type="checkbox" name="foo[]" value="bar" ...>. Это даст вам массив, который содержит значения всех отмеченных полей (которые имеют это имя). Например, $_POST['foo'][0]может быть barи $_POST['foo'][1]может быть baz(если оба проверены).
Левит

11

Вы также можете использовать псевдоэлементы CSS для выбора и отображения ваших ярлыков из всех атрибутов значения вашего флажка (соответственно).
Изменить: Это будет работать только с браузерами на основе webkit и blink (Chrome (ium), Safari, Opera ....) и, следовательно, с большинством мобильных браузеров. Никакой поддержки Firefox или IE здесь.
Это может быть полезно только при встраивании webkit / blink в ваши приложения.

<input type="checkbox" value="My checkbox label value" />
<style>
[type=checkbox]:after {
    content: attr(value);
    margin: -3px 15px;
    vertical-align: top;
    white-space:nowrap;
    display: inline-block;
}
</style>

Все ярлыки псевдоэлементов будут кликабельными.

Демо-версия: http://codepen.io/mrmoje/pen/oteLl , + Суть этого


Правда. Геккону, трезубцу и геккону, похоже, не нравится это. Это будет работать только с Webkit и Blink. Я
обновлю

3
Downvoted. Хотя это возможно, это плохой способ - не работает во многих браузерах, не подходит для доступности.
Джеймс Биллингем

Помимо проблем совместимости, это решение не такое семантическое, как главный ответ, поскольку в разметке нет прямой связи между <label> и <input>
deadboy

«Это работает на Webkit / Blink» пахнет как ошибка при использовании ( stackoverflow.com/questions/2587669/… ), поэтому он может перестать работать в любое время.
Ксенос


3
<label for="myInputID">myLabel</label><input type="checkbox" id="myInputID" name="myInputID />

1
Так как это может сбивать с толку некоторых читателей, вы должны изменить nameзначение атрибута на что - то иное , чем значение , которое присутствует в forи idатрибуты, так как эти два связаны, в то время как nameне является (это стил обязательно быть включены я считаю , хотя) ,
Джунейт

3

Это тоже работает:

<form>
    <label for="male"><input type="checkbox" name="male" id="male" />Male</label><br />
    <label for="female"><input type="checkbox" name="female" id="female" />Female</label>
</form>

Вы можете ommit forи idатрибуты в вашем примере, так как labelтег имеет только один входной элемент внутри него.
Джунейт

2

Это должно помочь вам: W3Schools - Ярлыки

<form>
  <label for="male">Male</label>
  <input type="radio" name="sex" id="male" />
  <br />
  <label for="female">Female</label>
  <input type="radio" name="sex" id="female" />
</form>


0

Используйте labelэлемент и forатрибут, чтобы связать его с флажком:

<label for="myCheckbox">Some checkbox</label> <input type="checkbox" id="myCheckbox" />



-7

Использовать этот

<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id" id="checkbox_lbl">Text</label>


$("#checkbox_lbl").click(function(){ 
    if($("#checkbox_id").is(':checked'))
        $("#checkbox_id").removAttr('checked');
    else
       $("#checkbox_id").attr('checked');
    });
});

9
Для этого не обязательно использовать JavaScript. Он встроен в HTML.
Лассе Банк

4
@LasseBunk, если бы это был просто JavaScript, но вся библиотека jQuery необходима для этого. Посмотрим, сможет ли кто-нибудь придумать решение Angular 2.
Лоран
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.