Як створити прапорець із міткою, на яку можна натиснути?


Відповіді:


1915

Спосіб 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>

ПРИМІТКА : Ідентифікатор повинен бути унікальним на сторінці!

Пояснення

Оскільки інші відповіді не згадують його, мітка може містити до 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
Любіть це, але будь ласка, відредагуйте ще раз. Це добре лише для прапорців. Не будемо закликати людей обертати свої інші входи етикетками, тому що це порушує систему сітки та мобільну чуйність буде важче прийти
Макс

1
Якщо хтось може пояснити коментар @John left, будь ласка, зробіть це, тому що для мене це зовсім не має сенсу.
Веслі Мерч

16
@John - це посібник з розмітки, спеціально для завантажувальної програми. Якщо ви не використовуєте фреймворк або використовуєте інший, це має бути абсолютно добре. Дякую за відповідь.
Веслі Мерч

3
@John. На сторінці, на яку ви посилаєтесь, приклади завантажувальної програми прикладають усі прапорці з міткою, я не бачу жодних попереджень, як ви взагалі вказуєте, можливо, це більше не стосується останньої завантажувальної програми.
користувач2144406

2
Як я дізнався сьогодні, не змішуйте Спосіб 1 та Метод 2. Якщо ви загорнуте прапорець у мітку І включіть позначку "У", після натискання на мітку не буде активовано прапорець.
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'] завжди має одне з двох значень одночасно? Навіть якщо обидва перевірили. Що таке група прапорців?
jeromej

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

11

Ви також можете використовувати псевдоелементи CSS для вибору та відображення міток із усіх значень атрибутів значення (відповідно).
Редагувати: це працюватиме лише з веб-браузерами та браузерами на основі мерехтіння (Chrome (ium), Safari, Opera ....), а отже, і з більшістю мобільних браузерів. Тут немає підтримки Firefox або IE.
Це може бути корисно лише під час вбудовування веб-камери / блимання у ваші програми.

<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
Захищений. Хоча це можливо, це поганий спосіб - не працює у багатьох браузерах, не добре для доступності.
Джеймс Біллінгем

Питання сумісності убік, це рішення не настільки смислове, як головна відповідь, оскільки немає прямої асоціації в розмітці між <міткою> та <вхідною>
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>

Ви можете опустити атрибути 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.