2010-10-21 19 views
6

Soy un poco nuevo en javascript. Esta pregunta puede sonar un poco demasiado tonto, pero no soy capaz de averiguar por qué el siguiente no funciona en IE y funciona en Firefox ..Onclick en select no funciona en IE

<select multiple="multiple"> 
<option value="tx" onClick="alert('tx');">Texas</option> 
<option value="ak" onClick="alert('ak');">Alaska</option> 
<option value="ca" onClick="alert('ca');">California</option> 
<option value="ws" onClick="alert('ws');">Washington</option> 
<option value="tn" onClick="alert('tn');">Tennessee</option> 
</select> 

La alerta no aparece en IE (estoy usando IE8). Pero funciona en Firefox !!!!!

+0

Eso no tiene nada que ver con jQuery. – SLaks

+0

posible duplicado de [Asignar clic() a un control secundario en jquery] (http://stackoverflow.com/questions/3970564/assign-click-to-a-child-control-in-jquery) – Fermin

+0

Lo siento Puse el encabezado equivocado en cuestión. Es un simple elemento de selección html y javascript para invocar el evento click que no funciona, es decir, – chuckyCheese

Respuesta

6

According to w3schools, la etiqueta de opción admite un atributo onclick. Intenté con la parte inferior del cañón IE6 y este no parece ser el caso.

La forma más sencilla de hacer esto sería:

<select multiple="multiple" onchange="alert(this.value);"> 
<option value="tx">Texas</option> 
<option value="ak">Alaska</option> 
<option value="ca">California</option> 
<option value="ws">Washington</option> 
<option value="tn">Tennessee</option> 
</select> 

Esto no es exactamente lo que está después, pero debe estar muy cerca.

ediciones

Se acaba de tomar más trabajo:

<select multiple="multiple" onchange=" 
    switch (this.value){ 
     case 'tx': funcOne(); break; 
     case 'ak': funcTwo(); break; 
     etc... 
    } 
"> 
<option value="tx">Texas</option> 
<option value="ak">Alaska</option> 
<option value="ca">California</option> 
<option value="ws">Washington</option> 
<option value="tn">Tennessee</option> 
</select> 

En este punto sería adecuado para envolver el onchange en una función en un archivo js en lugar de incrustar en el HTML .

+0

Gracias Mark, se ve mejor. Pero, ¿y si necesito asignar diferentes funciones para diferentes opciones? No puedo hacer que esto funcione, ¿verdad? – chuckyCheese

+0

@Rocky, mira las ediciones anteriores. – Mark

+0

Muchas gracias Mark. Eso debería hacerlo, supongo – chuckyCheese

2

Esto se debe a que IE no registra un evento de clic cuando selecciona una nueva opción en un campo de selección (adivinar). En su lugar, debe utilizar el evento onBlur (y poner el código en su Javascript en su lugar) como tal (suponiendo jQuery):

<script type='text/javascript'> 
    $(document).ready(function(){ 
    $('select#state').bind('blur', function(){ 
     alert(this.val()); 
    }); 
    }); 
</script> 

<select id='state' multiple="multiple"> 
    <option value="tx">Texas</option> 
    <option value="ak">Alaska</option> 
    <option value="ca">California</option> 
    <option value="ws">Washington</option> 
    <option value="tn">Tennessee</option> 
</select> 
+0

Lamento haber ingresado la pregunta equivocada. No tengo ningún jquery en absoluto. Selección de javascript y selección html simples. ¿Hay alguna manera de hacerlo funcionar en IE? – chuckyCheese

+0

Entendido, la respuesta de Robusto es la solución de Javascript más directa, válida y directa para el código que ha publicado. –

5

me gustaría utilizar el evento onchange:

<select multiple="multiple" onchange="alert(this.options[this.selectedIndex].value)"> 
<option value="tx">Texas</option> 
<option value="ak">Alaska</option> 
<option value="ca">California</option> 
<option value="ws">Washington</option> 
<option value="tn">Tennessee</option> 
</select> 

Aunque solución de Daniel Mendel es perfectamente válido

+0

Es genial cuando tengo una sola función para llamar. Pero, ¿y si necesito asignar diferentes funciones para diferentes opciones? – chuckyCheese

+0

Eso es lo que el selectedIndex le dirá. Puede obtener el elemento de opción real de eso y hacer algo diferente con él * dentro de la misma función *. Esa es una característica, no un inconveniente. Para simplificar (y seguir su ejemplo) coloco todo el manejador en el atributo de escucha de evento, pero realmente simplemente pasaría "esto" a una función externa. O use jQuery y asígnele una función literal. – Robusto

+0

cambio no se dispara hasta que el select pierda el foco, algunos navegadores lo activan al seleccionar con las flechas arriba/abajo –