Inicio rápido: agregar casillas de verificación (HTML)
[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows Runtime. Si estás desarrollando para Windows 10, consulta la documentación más reciente ]
Obtén información sobre cómo crear controlees checkbox. Usa casillas para presentar a los usuarios la selección de una opción de dos, una o varias opciones que no sean mutuamente excluyentes o incluso opciones mixtas.
Requisitos previos
Crear una casilla
Para crear una checkbox, crea un elemento input y establece su atributo type en "checkbox". Agrega texto para la checkbox después de la etiqueta de cierre del elemento input.
Sugerencia Cuando agregues una checkbox, enciérralo en un elemento label para aumentar el tamaño del área que responde a la interacción del usuario. Al hacerlo, facilitarás el uso de la casilla en dispositivos móviles.
De manera predeterminada, la casilla está desactivada hasta que el usuario hace clic en ella. Para hacer que una checkbox se muestre inicialmente como seleccionada o activada, usa el atributo checked. En este ejemplo, se crean cuatro casillas de verificación y se activa la segunda mediante el atributo checked.
.controlGroup
{
margin: 0px 0px 20px 0px;
padding: 0px;
border: 0px;
}
.controlGroupName
{
font:normal normal normal 11pt/15pt "Segoe UI Semilight";
font-size: 11pt;
margin:0px 0px 10px 0px;
padding:0px;
border: 0px;
position:relative;
vertical-align:top;
display:block;
}
.verticalStacking input[type="checkbox"]
{
margin-bottom: 16px;
}
<div style="margin: 20px">
<fieldset class="controlGroup verticalStacking">
<legend class="controlGroupName">Choose an option:</legend>
<label>
<input id="option1" type="checkbox" class="checkboxExample1" />Option 1
</label>
<br />
<label>
<input id="option2" type="checkbox" class="checkboxExample1" checked />Option 2
</label>
<br />
<label>
<input id="option3" type="checkbox" class="checkboxExample1" />Option 3
</label>
<br />
<label>
<input id="option4" type="checkbox" class="checkboxExample1" />Option 4
</label>
</fieldset>
</div>
Cuando ejecutes el código, las opciones 1, 3 y 4 estarán desactivadas, pero la opción 2 estará activada.
Determina si una casilla está activada
La checkbox admite los mismos eventos que otros elementos input, incluido el evento click. De todos modos, la checkbox proporciona información de estado y no suele desencadenar una acción (salvo en las casillas con estado indeterminado, que explicaremos en la siguiente sección). En lugar de controlar el evento click de la casilla y realizar una acción de inmediato según el estado checked de la casilla, por lo general, lees el estado de la checkbox cuando el usuario hace clic en algún tipo de botón Enviar para confirmar un conjunto de opciones. (Si quieres realizar una acción, usa un control ToggleSwitch en su lugar).
Para determinar si una casilla está activada, usa su propiedad checked. En este ejemplo, se crea un button que muestra los valores de checked de las casillas de verificación creadas en el ejemplo anterior.
function evaluateCheckboxState(eventInfo) {
var outputDiv = document.getElementById("checkedStateOutput");
var output = "<ul>";
WinJS.Utilities.query(".checkboxExample1").forEach(function (checkbox) {
output += "<li>" + checkbox.id + " checked: " + checkbox.checked + "</li>";
});
outputDiv.innerHTML = output + "</ul>";
}
WinJS.Namespace.define("CheckboxExamples",
{ evaluateCheckboxState: evaluateCheckboxState });
Este es el aspecto de las casillas cuando ejecutas código y haces clic en el botón:
Crea una casilla con estado indeterminado
Cuando una opción se aplica a más de un objeto, puedes usar una casilla para indicar si la opción se aplica a todos los objetos, a algunos o a ninguno. Cuando la opción se aplica a varios objetos, pero no a todos, usa el estado indeterminate de la casilla para representar una opción mixta.
Solo puedes establecer la propiedad indeterminate en JavaScript: no hay atributos "indeterminate" que puedas establecer en HTML.
Nota Cambiar la propiedad indeterminate de una casilla no cambia automáticamente su valor checked.
En este ejemplo, se crea una casilla "Select all" (Seleccionar todos) que activa o desactiva un conjunto de casillas de verificación secundarias (opciones 1 a 4).
<fieldset class="controlGroup verticalStacking">
<legend class="controlGroupName">Choose an option:</legend>
<label>
<input type="checkbox" id="selectAll" onclick="CheckboxExamples.checkAll(event)" />Select all
</label>
<div style="margin-left: 29px" onclick="CheckboxExamples.updateCheckboxes(event)">
<label>
<input id="Checkbox1" type="checkbox" class="checkboxExample2" />Option 1
</label>
<br />
<label>
<input id="Checkbox2" type="checkbox" class="checkboxExample2" checked />Option 2
</label>
<br />
<label>
<input id="Checkbox3" type="checkbox" class="checkboxExample2" />Option 3
</label>
<br />
<label>
<input id="Checkbox4" type="checkbox" class="checkboxExample2" />Option 4
</label>
</div>
</fieldset>
Las casillas de verificación tienen este aspecto:
En este ejemplo, se controla el evento click de la casilla selectAll
, de modo que, al hacer clic en ella, se desencadene la función checkAll
.
<input type="checkbox" id="selectAll" onclick="CheckboxExamples.checkAll(event)" />Select all
La función checkAll
activa o desactiva todas las demás casillas de verificación cuando activas o desactivas la casilla selectAll
.
function checkAll(eventInfo) {
var options = document.getElementsByClassName("checkboxExample2");
for (var i = 0; i < options.length; i++) {
options[i].checked = event.srcElement.checked;
}
}
Se llama a la función updateCheckboxes
cuando se hace clic en alguna de las casillas de verificación.
<div style="margin-left: 29px" onclick="CheckboxExamples.updateCheckboxes(event)">
Esta permite conocer el estado activado de cada casilla y actualiza la casilla selectAll
.
- Si se activan todas las casillas secundarias, establece el estado indeterminate de la casilla
selectAll
en false, y su valor checked, en true. - Si se desactivan todas las casillas secundarias, establece el estado indeterminate de la casilla
selectAll
en false, y su valor checked, en false. - Si se activan algunas casillas secundarias y se desactivan otras, establece el estado indeterminate de la casilla
selectAll
en true, y su valor checked, en false.
function updateCheckboxes(eventInfo) {
var options = document.getElementsByClassName("checkboxExample2");
var selectedCount = 0;
for (var i = 0; i < options.length; i++) {
if (options[i].checked) {
selectedCount++;
}
}
// Update the selectAll checkbox
// to reflect the state of the child checkboxes.
var selectAll = document.getElementById("selectAll");
if (options.length === selectedCount) {
selectAll.indeterminate = false;
selectAll.checked = true;
} else if (0 === selectedCount) {
selectAll.indeterminate = false;
selectAll.checked = false;
} else {
selectAll.indeterminate = true;
//selectAll.checked = false;
}
}
En la parte siguiente del ejemplo, se usa WinJS.Namespace.define para hacer checkAll
y updateCheckboxes
públicos.
WinJS.Namespace.define("CheckboxExamples",
{
checkAll: checkAll,
updateCheckboxes: updateCheckboxes
});
Hay algo más que hacer en este punto. La segunda opción permite que las casillas se muestren inicialmente en el estado checked:
<label>
<input id="Checkbox2" type="checkbox" class="checkboxExample2" checked />Option 2
</label>
La casilla selectAll
se muestra inicialmente en el estado desactivado, y se llama al método updateCheckboxes
solo cuando el usuario hace clic en una casilla. Por eso, cuando se ejecute el código de ejemplo, la casilla selectAll
estará desactivada cuando debería estar en el estado indeterminado.
Para corregir este problema, agrega una llamada a updateCheckboxes
cuando se cargue la página.
- Si tu código está en un PageControl, usa un método ready para llamar a
updateCheckboxes
. - Si tu código está en el archivo default.js de la aplicación, usa el controlador de eventos activated para llamar a
updateCheckboxes
. - En ambos casos, también puedes controlar el evento DOMContentLoaded y usar el controlador para llamar a
updateCheckboxes
.
En este ejemplo, se usa un PageControl para que llame a updateCheckboxes
desde el método ready.
WinJS.UI.Pages.define("/pages/checkbox/checkbox.html", {
// This function is called whenever a user navigates to this page. It
// populates the page elements with the app's data.
ready: function (element, options) {
// TODO: Initialize the page here.
CheckboxExamples.updateCheckboxes();
},
unload: function () {
// TODO: Respond to navigations away from this page.
},
updateLayout: function (element, viewState, lastViewState) {
/// <param name="element" domElement="true" />
// TODO: Respond to changes in viewState.
}
});
Resumen y siguientes pasos
Aprendiste a crear controles checkbox, a detectar el estado y a usar la propiedad indeterminate para indicar un estado intermedio.
A continuación, echa un vistazo a Cómo aplicar estilo a las casillas de verificación.
Temas relacionados
Cómo aplicar estilo a las casillas de verificación
Directrices y lista de comprobación para casillas de verificación