¿Cómo cambio programáticamente una selección para que active su comportamiento de cambio?

StackOverflow https://stackoverflow.com/questions/1224728

  •  22-07-2019
  •  | 
  •  

Pregunta

Esto no parece estar funcionando:

<select id="mySel" onchange="alert('foo')">
    <option value="a">a</option>
    <option value="b">b</option>
</select>

<script>
dojo.byId('mySel').value = 'b'; // select changes, but nothing is alerted
</script>

(Estoy usando dojo, pero eso realmente no importa)

¿Fue útil?

Solución

El nombre 'onchange' es un poco engañoso a menos que comprenda que un evento de cambio y un valor que se cambia no son lo mismo. Un evento de cambio ocurre cuando el usuario cambia el valor en el navegador. Sin embargo, creo que puede activar el evento manualmente llamando a dojo.byId ('mySel'). Onchange () después de cambiar el valor mediante programación. (Sin embargo, es posible que deba definir una función que llame a alert . No lo he hecho yo mismo).

Otros consejos

Esto cambiará el valor pero no activará el evento onchange. Cada vez que modifique un elemento con JavaScript, no activará el evento (le impedirá tener problemas de recursión *).

Si configura un controlador de eventos así.

function myHandler(){
  //do whatever stuff here
  changeColor( dojo.byId('mySel') );
}

entonces puede llamar a esto por separado, después de establecer el valor mediante programación.

Nota (*): no soy un experto en dojo ... así que supongo que no han "agregado" la llamada automática de los controladores de eventos cuando establece el valor de JavaScript.

Puede echar un vistazo a estas preguntas y sus respuestas: podrían ayudar:

Para cualquiera que quiera activar el evento change usando javascript.

        var evObj = document.createEvent("HTMLEvents");
        evObj.initEvent("change", true, true);
        var elem = document.getElementById('some-id');
        elem.dispatchEvent(evObj);

puede acceder al evento 'onpropertychange' que contiene una propiedad dentro de los argumentos del evento para identificar qué propiedad se modificó.

Detecta los cambios 'selectedIndex' y 'value' - simplemente prueba de caso 'propertyName'

<select id="mySel" onpropertychange="dothis(event);">
    <option value="a">a</option>    
    <option value="b">b</option>
</select>

function dothis(event)
{

    if (event.propertyName == "selectedIndex")
            alert('selection changed');
}

fuera de mi cabeza ... (actualmente usando el framework asp.net js que es bastante diferente)

Intente asignar selectedIndex en su lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top