2015-11-21 2 views
16

У меня есть форма 4 варианта (они могут быть флажками или радио).Проверка флажков в HTML

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

Я знаю, что это возможно в JS/jQuery, но я хочу базовое решение HTML/CSS.

+8

Почему пометить вопрос с JavaScript если вы хотите решение без javascript? – Arg0n

+3

HTML5 имеет эту функцию, см. [HTML5: Как использовать атрибут «required» с полем ввода «радио»] (http://stackoverflow.com/questions/8287779/html5-how-to-use-the -required-attribute-with-a-radio-input-field) –

ответ

41

Чтобы иметь возможность проверять несколько входов, они должны быть флажками. (Они могли быть радио кнопки с разными названиями, но вы не смогли бы снять пометку на них один раз проверил.)

Так используйте флажки, и показать кнопку Отправить, если таковые будут проверены, используя general sibling selector (~):

input[type="Submit"] { 
 
    display: none; 
 
} 
 

 
input:checked ~ input[type="Submit"] { 
 
    display: inline; 
 
}
<input id="c1" type="checkbox"><label for="c1">First</label><br> 
 
<input id="c2" type="checkbox"><label for="c2">Second</label><br> 
 
<input id="c3" type="checkbox"><label for="c3">Third</label><br> 
 
<input id="c4" type="checkbox"><label for="c4">Fourth</label><br> 
 
<input type="Submit">

Если вы хотите, появление инвалида кнопку отправки, добавьте вторую кнопку, которая отключена.

Если вход не нажат, отобразите отключенную кнопку отправки. Когда один или несколько входов щелкнул, показывают включена кнопка отправки только:

input[type="Submit"]:not([disabled]) { 
 
    display: none; 
 
} 
 

 
input:checked ~ input[type="Submit"]:not([disabled]) { 
 
    display: inline; 
 
} 
 

 
input:checked ~ input[disabled] { 
 
    display: none; 
 
}
<input id="c1" type="checkbox"><label for="c1">First</label><br> 
 
<input id="c2" type="checkbox"><label for="c2">Second</label><br> 
 
<input id="c3" type="checkbox"><label for="c3">Third</label><br> 
 
<input id="c4" type="checkbox"><label for="c4">Fourth</label><br> 
 

 
<input type="Submit" disabled> 
 
<input type="Submit">

+2

_/\\ _ просто потрясающе – Arjun

+0

Во втором подходе по-прежнему можно отправить недопустимую форму с помощью вкладки, чтобы перемещаться и нажимать пробел. – falsarella

+1

@falsarella, отличная точка! Теперь отредактирован, чтобы дать кнопке «Отправить» отрицательный tabindex. –

7

Вы можете использовать следующие, обязательные для заполнения.

<input type="radio" name="name" required> 

Какой из них не требуется, не будет проверен, если он отмечен галочкой или нет.

+3

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

10

Вы можете сделать это в html5, используя required атрибут Как

<input type="checkbox" required name="your_checkbox_name"> 

Это говорит браузеру, что форма не должна быть поданным без чекбокс быть checked.Although я рекомендую java-script, поскольку не все браузеры быть в состоянии признать это.

Или

Если вы хотите, чтобы обнаружить, если по крайней мере, один флажок, как предложено @RickHitchcock в комментарии, Вы можете использовать

span { 
 
    display: inline; 
 
    color: red; 
 
} 
 
input[type="Submit"], 
 
input:checked ~ span { 
 
    display: none; 
 
} 
 
input:checked ~ input[type="Submit"] { 
 
    display: inline; 
 
}
<form action="#" method="post"> 
 
    <input type="checkbox" />Checkbox 1 
 
    <br /> 
 
    <input type="checkbox" />Checkbox 1 
 
    <br /> 
 
    <input type="checkbox" />Checkbox 1 
 
    <br /> 
 
    <input type="submit" value="Submit" /><span>! Please check at least one checkbox</span> 
 

 
</form>

+4

Форма не может быть отправлена, если этот конкретный вход не был проверен. –

+0

@RickHitchcock Да, я думаю, это то, чего хотел OP. –

+3

Я уверен, что ОП просит группу флажков с требованием «Выберите один или несколько», а не «Выберите этот конкретный номер и нуль или более других» – Quentin

13

В дополнение к ответу @Rick Хичкока, я думаю, что вы хотите, чтобы показать пользователю кнопку submit, но он будет отключен, пока не будет проверен один из флажков.

Если да, то вы можете использовать pointer-events (во всех современных браузерах: http://caniuse.com/#feat=pointer-events), как это:

input[type="Submit"] { 
 
    opacity:0.5; 
 
    pointer-events:none; 
 
    /* animation added for fancy ;) */ 
 
    transition:all .2s ease; 
 
} 
 

 
input:checked ~ .button-wrapper input[type="Submit"] { 
 
    opacity:1; 
 
    pointer-events:all; 
 
} 
 

 
.button-wrapper { 
 
    position:relative; 
 
    display:inline-block; 
 
} 
 

 
.button-wrapper:before { 
 
    content:""; 
 
    position:absolute; 
 
    top:0; 
 
    left:0; 
 
    width:100%; 
 
    height:100%; 
 
    z-index:1; 
 
} 
 

 
input:checked ~ .button-wrapper:before { 
 
    display:none; 
 
}
<input id="c1" type="checkbox"><label for="c1">First</label><br> 
 
<input id="c2" type="checkbox"><label for="c2">Second</label><br> 
 
<input id="c3" type="checkbox"><label for="c3">Third</label><br> 
 
<input id="c4" type="checkbox"><label for="c4">Fourth</label><br> 
 
<div class="button-wrapper"> 
 
    <input type="Submit" tabindex="-1"> 
 
</div>

Редактировать Я добавил "маску" в .button-wrapper:before так будет работать в старых браузерах.

+0

'pointer-events' не работает в IE10 и ниже. Если пользователь просматривает IE10, они смогут щелкнуть кнопку без проверки флажков. – rblarsen

+1

@rblarsen, спасибо за ваш комментарий. Я также обновил свой ответ, чтобы поддержать старого. Я упоминал, что 'pointer-events' работает в« современных браузерах »и добавляет ссылку« caniuse ». Кроме того, ему нужно все равно проверять событие отправки (по крайней мере, сервер), это не проблема отправки формы, даже кнопка скрыта;) –

+0

Вы можете обойти «указатели-события», не работающие в «IE10 и ниже», с после обхода JS: http://codepen.io/jonathan/pen/BriCb. Также IE11 допускает события-указатели, но только если свойство 'display' имеет значение' block' или 'inline-block'. –

6

Попробуйте:

<input id="c3" type="checkbox" required><label for="c3">Third</label><br> 
<input id="c4" type="checkbox" required><label for="c4">Fourth</label><br> 

Или вы можете попробовать это с помощью JQuery для проверки HTML флажок:

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Makes "field" always required. Nothing and blanks are invalid. </title> 
<link rel="stylesheet" href="http://jqueryvalidation.org/files/demo/site-demos.css"> 

</head> 
<body> 
<form id="myform"> 
<label for="field">Required: </label> 
<input type="text" class="left" id="field" name="field"> 
<br/> 
<input type="submit" value="Validate!"> 
</form> 
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> 
<script src="http://jqueryvalidation.org/files/dist/jquery.validate.min.js">  </script> 
<script src="http://jqueryvalidation.org/files/dist/additional- methods.min.js"></script> 
<script> 
// just for the demos, avoids form submit 
jQuery.validator.setDefaults({ 
    debug: true, 
    success: "valid" 
}); 
$("#myform").validate({ 
    rules: { 
field: { 
    required: true 
} 
    } 
}); 
</script> 
</body> 
</html> 

required это путь HTML проверяет вещи

+0

Вы правильно прочитали мой вопрос: «Я хочу выбрать несколько опций, но ** обязателен **». не все они являются обязательными ... –