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

Ответы:

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>
Quentin
источник
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 , + Суть этого

mrmoje
источник
Правда. Геккону, трезубцу и геккону, похоже, не нравится это. Это будет работать только с Webkit и Blink. Я
обновлю
3
Downvoted. Хотя это возможно, это плохой способ - не работает во многих браузерах, не подходит для доступности.
Джеймс Биллингем
Помимо проблем совместимости, это решение не такое семантическое, как главный ответ, поскольку в разметке нет прямой связи между <label> и <input>
deadboy
«Это работает на Webkit / Blink» пахнет как ошибка при использовании ( stackoverflow.com/questions/2587669/… ), поэтому он может перестать работать в любое время.
Ксенос
7
<label for="vehicle">Type of Vehicle:</label>
<input type="checkbox" id="vehicle" name="vehicle" value="Bike" />
Дэйв Кисс
источник
3
<label for="myInputID">myLabel</label><input type="checkbox" id="myInputID" name="myInputID />
ShaneBlake
источник
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>
Mystral
источник
Вы можете 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>
Джон
источник
1
<label for="my_checkbox">Check me</label>
<input type="checkbox" name="my_checkbox" value="Car" />
Кристофер Армстронг
источник
0

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

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

Джеймс Аллардис
источник
0

На угловой этикетке материала с флажком

<mat-checkbox>Check me!</mat-checkbox>
Арункумар Рамасами
источник
-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');
    });
});
Anni
источник
9
Для этого не обязательно использовать JavaScript. Он встроен в HTML.
Лассе Банк
4
@LasseBunk, если бы это был просто JavaScript, но вся библиотека jQuery необходима для этого. Посмотрим, сможет ли кто-нибудь придумать решение Angular 2.
Лоран