Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

148
Vistas
¿Es posible escuchar el cambio de índice seleccionado?

Estoy buscando una forma (o una solución alternativa) para suscribirme al cambio de índice selectedIndex (en el elemento <select> ) cuando el cambio se realiza mediante una asignación simple (como myElement.selectedIndex=1 ).

 <select id = "mySelect" onchange="myListener()"> <option>0</option> <option>1</option> </select> <script> function myListener() { console.log('Yes, I hear...'); // doesn't work on selectedIndex assignment } document.getElementById('mySelect').selectedIndex = 1; </script>

Parece que no es posible, pero tal vez haya alguna solución.
dispatchEvent no es una opción (la conexión del oyente se debe realizar desde el exterior).


Mi única solución hasta ahora, muy similar a @ jren510 (pero me gusta más su solución).

 function myListener() { console.log('Yes, I hear...'); } const originalPropDescriptor = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype, 'selectedIndex'); Object.defineProperty(HTMLSelectElement.prototype, 'originalSelectedIndex', originalPropDescriptor); Object.defineProperty(HTMLSelectElement.prototype, 'selectedIndex', { get() { return this.originalSelectedIndex; }, set(value) { myListener(); this.originalSelectedIndex = value; } });

Me gustaría evitar anular los métodos nativos, hasta ahora es la única forma que veo.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Tal vez no sea la mejor respuesta, pero mencionaste soluciones.

Puede intentar anular el setter para el objeto para el que está tratando de detectar el cambio.

 let mySelect = document.getElementById("mySelect"); const callback = () => { console.log("Yes, I hear..."); }; const original = Object.getOwnPropertyDescriptor( Object.getPrototypeOf(mySelect), "selectedIndex" ); Object.defineProperty(mySelect, "selectedIndex", { set: function (t) { callback(); return original.set.apply(this, arguments); }, get: function () { return original.get.apply(this); } }); let myButton = document.getElementById("myButton"); myButton.addEventListener("click", () => { mySelect.selectedIndex = 1; });
 <select id="mySelect"> <option>0</option> <option>1</option> </select> <button id="myButton"> change selector value to 1 </button>

Vale la pena mencionar que la devolución de llamada no se ejecuta cuando se cambia manualmente la selección aquí. Si desea conservar ese comportamiento, puede agregar un detector de eventos que llame a la callback de llamada como de costumbre, aunque puede existir una mejor solución que captura ambos casos.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda