Inicio > Internet, Programación > Javascript (IE vs Firefox): El elemento select

Javascript (IE vs Firefox): El elemento select

Martes, 29 de abril de 2008 Dejar un comentario Ir a comentarios

JavaScript

Últimamente me encuentro inmerso en el desarrollo de un portal Web, con el cual estoy aprendiendo muchas cosas útiles sobre peculiaridades de los lenguajes de programación PHP, JavaScript y SQL. Una de las cosas que más me ha fascinado ha sido la capacidad para crear contenido dinámico por medio de JavaScript en páginas HTML, ya que hasta ahora nunca había hecho gran cosa con este lenguaje de programación.

Sin embargo las distintas formas que tienen los navegadores Web de interpretar el código HTML a veces nos lleva a más de un quebradero de cabeza. A continuación os comento el que he tenido respecto a los elementos <SELECT> y <OPTION>.

Os situo en escena. El elemento option admite el evento onclick mediante el cual podemos ejecutar código javascript cuando pulsamos con el ratón en dicho elemento. El código que os muestro a continuación funcionaba perfectamente en multitud de navegadores como firefox, opera o epiphany, sin embargo en IE y Konqueror no se realizaba correctamente la llamada a la función de javascipt:

<script language="javascript" type="text/javascript">
function miFunctionJS(x, y){
...
}
</script>
...
...
<select multiple="true" name ="miSelect[]" id="miSelect" size="7">
<option onclick="miFuncionJS(valor1 , valor2)" value="valor3">
<?php echo $miarray[0];?>
</option>
...
<option onclick="miFuncionJS(valor1 , valor2)" value="valor3">
<?php echo $miarray[0];?>
</option>
</select>

¿Por qué? Tras mucho investigar parece ser que algunos navegadores como IE no reconocen los eventos del elemento option y hay que trabajar con los eventos que maneja el elemento que contiene los options, es decir, el elemento select. Este elemento puede manejar varios eventos, pero el que nos interesa en este caso es el evento onchange, el cual se dispara cuando cambia el contenido del elemento o se cambia el elemento seleccionado. Con este evento por tanto, podemos detectar también cuando seleccionamos uno de los elementos que quedan dentro del select, osea los diferentes elementos options. Por medio de la propiedad selectedIndex podemos conocer que elemento del select se acaba de seleccionar y obtener su valor o hacer lo que queramos con ese índice. A continuación os muestro la adaptación del código anterior realizada para que funcione correctamente el código tanto en IE como en firefox:

<script language="javascript" type="text/javascript">
function miFunctionJS(indice, x){
document.miFormulario.miSelect.options[indice].value // Obtener el valor de un determinado elemento option
...
}
</script>
...
...
<select multiple="true" name ="miSelect[]" id="miSelect" size="7"  onchange="mifuncionJS(this.selectedIndex, valor2)">
<option value="valor3">
<?php echo $miarray[0];?>
</option>
...
<option value="valor3">
<?php echo $miarray[0];?>
</option>
</select>
GD Star Rating
loading...
Javascript (IE vs Firefox): El elemento select, 7.8 out of 10 based on 4 ratings
Share
  1. Domingo, 2 de noviembre de 2008 a las 00:39 | #1
    GD Star Rating
    loading...

    graicias tenia el mismo problema

  2. Martes, 7 de abril de 2009 a las 08:24 | #2
    GD Star Rating
    loading...

    Muchisimas gracias,

    Este IE nos va a volver locos a todos, ya podia yo mirar porque me fallaba el en IE si hay que ponerle el .

    Muchas gracias.

  3. Viernes, 24 de abril de 2009 a las 08:39 | #3
    GD Star Rating
    loading...

    Es lógico que los eventos se capturen desde el contenedor padre. ¿O es que ahora a no saber programar debidamente le llamamos “errores del IE”?

  4. Viernes, 24 de abril de 2009 a las 08:43 | #4
    GD Star Rating
    loading...

    Hola Paquillo ;) . Creo que nadie ha dicho que sea un error de IE, solo he comentado que hay navegadores que trabajan de distintas formas con estos elementos.

    Saludos!

  5. Carlos
    Miércoles, 7 de octubre de 2009 a las 14:21 | #5
    GD Star Rating
    loading...

    @ErPaquillo
    Pués seguramente serán errores del IE, necesito trabajar con el evento onmouseover sobre un objeto option, podría, una persona tan lúcida en programación como ud, decirme cómo hacer esto desde el contenedor padre?, creo que llegamos nuevamente a deficiencias de ie.

  1. Sin trackbacks aún.