2015-11-21 28 views
16

Ho un modulo ci sono 4 opzioni (possono essere caselle di controllo o radio).Caselle di controllo di convalida in HTML

Desidero selezionare più opzioni, ma una è obbligatoria.

So che è possibile in JS/jQuery ma voglio una soluzione di base HTML/CSS.

+8

Perché etichettare la questione con javascript se vuoi una soluzione senza javascript? – Arg0n

+3

HTML5 ha questa funzione, fai riferimento a questo: [HTML5: come utilizzare l'attributo "obbligatorio" con un campo di input "radio"] (http://stackoverflow.com/questions/8287779/html5-how-to-use-the -rapposto-attributo-con-un-campo-radio-input) –

risposta

41

Per poter controllare più input, devono essere caselle di controllo. (Si potrebbero essere pulsanti di opzione con nomi diversi, ma non sarebbe in grado di deselezionare una volta controllato.)

Quindi usano caselle di controllo, e mostrano il pulsante di invio solo se ogni sono controllati, utilizzando il 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">

Se si desidera che il pulsante l'aspetto di un disabile presentare, aggiungere un secondo pulsante che è disattivato.

Se non si fa clic su alcun input, mostrare solo il pulsante di invio disabilitato. Quando uno o più ingressi sono cliccato, visualizza il pulsante di invio abilitato solo:

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

_/\\ _ semplicemente fantastico – Arjun

+0

Nel secondo approccio è ancora possibile inviare un modulo non valido utilizzando la scheda per navigare e premere lo spazio. – falsarella

+1

@falsarella, punto eccellente! Ora modificato per dare al pulsante Invia un tabindex negativo. –

7

È possibile utilizzare quanto segue per il quale è obbligatorio.

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

Quale senza richiesta non verrà testato se è spuntata o meno.

+3

È possibile selezionare solo un pulsante di opzione con un nome specifico. –

10

È possibile farlo in HTML5 utilizzando l'attributo required Come

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

Questo dice al browser che il modulo non dovrebbe essere quello di presentazione, senza la casella di controllo essendo checked.Although vi consiglio java-script dal momento che non tutti i browser essere in grado di riconoscerlo.

O

Se si vuole rilevare se almeno una casella di controllo è selezionata come suggerito da @RickHitchcock nelle commenti, Si potrebbe utilizzare

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

Impossibile inviare il modulo a meno che questo particolare input non sia stato controllato. –

+0

@RickHitchcock Sì, credo che sia quello che l'OP voleva. –

+3

Sono abbastanza sicuro che l'OP chiede un gruppo di caselle con il requisito "Seleziona uno o più" non "Seleziona questo particolare e zero o più degli altri" – Quentin

13

seguito alla risposta di @Rick Hitchcock, penso che si vuole mostrare all'utente il pulsante invia ma verrà disabilitato fino a quando una delle caselle di controllo sarà selezionata.

Se è così, è possibile utilizzare pointer-events (in tutti i browser moderni: http://caniuse.com/#feat=pointer-events) come questo:

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>

Edit mi è stata aggiunta una "maschera" in .button-wrapper:before così lo farà lavoro nei vecchi browser.

+0

'pointer-events' non funziona in IE10 e sotto. Se un utente sta navigando in IE10, sarà in grado di fare clic sul pulsante senza selezionare alcuna casella di controllo. – rblarsen

+1

@rblarsen, grazie per il tuo commento. Sono stato aggiornato la mia risposta per supportare anche il vecchio. Mi è stato detto che 'pointer-events' funziona su' browser moderni' e ha aggiunto il link 'caniuse'. Inoltre, ha bisogno di convalidare l'evento di invio comunque (server almeno) non è un problema inviare il modulo anche se il pulsante è nascosto;) –

+0

È possibile aggirare 'pointer-events' che non funziona in' IE10 e sotto' con il seguendo la soluzione JS: http://codepen.io/jonathan/pen/BriCb. Anche IE11 consente gli eventi puntatore ma solo se la proprietà 'display' dei collegamenti è impostata su' block' o 'inline-block'. –

6

Try This:

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

Oppure si può provare questo utilizzando jQuery per convalidare una casella di controllo 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 è il modo html convalida cose

+0

Hai letto correttamente la mia domanda, "Voglio selezionare più opzioni ma ** una è obbligatoria **." non tutti sono obbligatori ... –