Addaw, ir a inicio Donar

Técnica Scripts de cliente WCAG 2.2

SCR19Usar un evento onchange en un elemento select sin provocar un cambio de contexto

En resumen

Esta técnica muestra cómo usar el evento onchange de una lista desplegable para actualizar las opciones de otra lista situada después en el orden de lectura, sin abrir ventanas, enviar formularios ni cambiar de página. Así se evitan cambios de contexto inesperados que desorientan a usuarios de lectores de pantalla y a quienes navegan con teclado. Conviene aplicarla en formularios con listas dependientes (país y provincia, marca y modelo).

Aplicabilidad

HTML con compatibilidad con scripts.

Descripción

El objetivo de esta técnica es demostrar cómo usar correctamente un evento onchange con un elemento select para actualizar otros elementos de la página web. Esta técnica no provoca un cambio de contexto. Cuando hay uno o más elementos select en la página web, un evento onchange en uno de ellos puede actualizar las opciones de otro elemento select de la página web. Todos los datos que necesitan los elementos select están incluidos dentro de la página web.

Es importante señalar que el elemento select que se modifica está situado después del elemento select desencadenante en el orden de lectura de la página web. Esto garantiza que las tecnologías de asistencia detecten el cambio y que los usuarios encuentren los nuevos datos cuando el elemento modificado reciba el foco. Esta técnica depende de la compatibilidad con JavaScript del agente de usuario.

Ejemplos

Este ejemplo contiene dos elementos select. Cuando se selecciona un elemento en el primer select, las opciones del otro select se actualizan en consecuencia. El primer elemento select contiene una lista de continentes. El segundo elemento select contendrá una lista parcial de países situados en el continente seleccionado. Hay un evento onchange asociado al select de continentes. Cuando cambia la selección de continente, los elementos del select de países se modifican mediante JavaScript a través del Document Object Model (DOM). Todos los datos necesarios, la lista de países y de continentes, están incluidos dentro de la página web.

Resumen del código que figura a continuación

  • Variable de tipo array countryLists, que contiene la lista de países de cada continente del elemento select desencadenante.
  • Función countryChange(), a la que llama el evento onchange del elemento select de continentes.
  • El código HTML para crear los elementos select en el cuerpo de la página web.
<!doctype html> 
<html lang="en"> 
  <head> 
    <meta charset=utf-8"> 
    <title>Dynamic Select Statements</title> 
    <script>
    // array of possible countries in the same order as they appear
    // in the country selection list 
    var countryLists = new Array(4) 
    countryLists["empty"] = ["Select a Country"]; 
    countryLists["North America"] = ["Canada", "United States", "Mexico"]; 
    countryLists["South America"] = ["Brazil", "Argentina", "Chile", "Ecuador"]; 
    countryLists["Asia"] = ["Russia", "China", "Japan"]; 
    countryLists["Europe"]= ["Britain", "France", "Spain", "Germany"]; 
    /* CountryChange() is called from the onchange event of a select element. 
     * param selectObj - the select object which fired the on change event. 
    */ 
    function countryChange(selectObj) { 
    // get the index of the selected option 
    var idx = selectObj.selectedIndex; 
    // get the value of the selected option 
    var which = selectObj.options[idx].value; 
    // use the selected option value to retrieve the list of items 
    // from the countryLists array 
    cList = countryLists[which]; 
    // get the country select element via its known id 
    var cSelect = document.getElementById("country"); 
    // remove the current options from the country select 
    var len=cSelect.options.length; 
    while (cSelect.options.length > 0) { 
      cSelect.remove(0); 
    } 
    var newOption; 
    // create new options 
    for (var i=0; i<cList.length; i++) { 
      newOption = document.createElement("option"); 
      newOption.value = cList[i];  // assumes option string and value are the same 
      newOption.text=cList[i]; 
   // add the new option 
    try { 
      cSelect.add(newOption);  // this will fail in DOM browsers but is needed for IE 
    } 
    catch (e) { 
      cSelect.appendChild(newOption); 
    } 
  } 
} 
  </script>
</head>
<body>
  <h1>Dynamic Select Statements</h1>
  <label for="continent">Select Continent</label>
  <select id="continent" onchange="countryChange(this);">
    <option value="empty">Select a Continent</option>
    <option value="North America">North America</option>
    <option value="South America">South America</option>
    <option value="Asia">Asia</option>
    <option value="Europe">Europe</option>
  </select>
  <div>
    <label for="country">Select a country</label>
    <select id="country">
      <option value="0">Select a country</option>
    </select>
  </div>
</body>
</html>

Aquí hay un ejemplo práctico: Dynamic Select (select dinámico)

Pruebas

Procedimiento

  1. Navegar hasta el elemento select desencadenante (en este ejemplo, el de selección de continentes) y cambiar el valor del select.
  2. Navegar hasta el elemento select que actualiza el desencadenante (en este ejemplo, el de selección de países).
  3. Comprobar que en el otro elemento select se muestran los valores de opción correspondientes.
  4. Navegar hasta el elemento select desencadenante y recorrer las opciones sin cambiar el valor.
  5. Comprobar que en el elemento asociado siguen mostrándose los valores de opción correspondientes.

Se recomienda probar los elementos select con una tecnología de asistencia para verificar que se reconocen los cambios en el elemento asociado.

Resultados esperados

  • Las comprobaciones n.º 3 y n.º 5 son verdaderas.

Recursos

Cómo lo comprobamos en ADDAW

En las auditorías de accesibilidad de ADDAW revisamos cada criterio de conformidad siguiendo este catálogo de técnicas: comprobamos si la web aplica una técnica suficiente y documentamos cada fallo común con capturas y el código afectado, para que el equipo de desarrollo sepa exactamente qué corregir. Los informes siguen la metodología del Observatorio de Accesibilidad y la norma UNE-EN 301 549.

Solicitar una auditoría

Fuente y licencia

Traducción al español, no oficial, realizada por ADDAW a partir de la técnica SCR19 del documento «Techniques for WCAG 2.2» del W3C (versión del repositorio público del W3C a 22/10/2026). Copyright © W3C® (MIT, ERCIM, Keio, Beihang). Se publica conforme a la licencia de documentos del W3C. El texto normativo de referencia es el original en inglés; si detecta un error en la traducción, escríbanos.

Financiado por la unión europea Gobierno de españa red.es Plan de recuperación transformación y resilencia kit digital