Foros del Web » Programando para Internet » Javascript »

No se puede mover el foco hacia el control porque el control es invisible...

Estas en el tema de No se puede mover el foco hacia el control porque el control es invisible... en el foro de Javascript en Foros del Web. Que tal? Esto me esta volviendo loco realmente... La siguiente funcion trabaja barbaro en Chrome y Firefox... aunque en Internet Explorer NO! me da el ...
  #1 (permalink)  
Antiguo 04/06/2010, 13:27
 
Fecha de Ingreso: junio-2008
Mensajes: 137
Antigüedad: 15 años, 9 meses
Puntos: 0
No se puede mover el foco hacia el control porque el control es invisible...

Que tal?

Esto me esta volviendo loco realmente...

La siguiente funcion trabaja barbaro en Chrome y Firefox... aunque en Internet Explorer NO! me da el siguiente error:
Cita:
Mensaje: No se puede mover el foco hacia el control porque el control es invisible, no está habilitado o es de un tipo que no acepta al foco.
La funcion en si, permite cargar datos en un SELECT, nada mas que eso.

Código:
function cargarCanales() {                    
        var ciudad = document.getElementById("ciudad").value;
        var startTime = "<?php echo $startTime; ?>";
        var endTime = "<?php echo $endTime; ?>";              

        <!-- ** Ejectu la funcion de AJAX para obtener el numero de canales de la ciudad ** -->
        cantCanales = getCanales(ciudad,startTime,endTime);

 Hasta aca funciona barbaro, me devuelve el valor de cantCanales

        for (i = 1; i <= cantCanales; i++) {
                canal.options[i]=new Option(i, i);
        }

 De esta funcion no pasa, con lo que supongo que debe ser algun problema del FOR 
y de la carga del SELECT, pero como dije, funciona barbaro en Chrome y Firefox. 

        $("#canal").attr("disabled",false);
}
El select lo tengo definido de la siguiente forma:
Código:
<select id="canal" name="canal"><option value="0">Select Channels..</option></select>
Hace 1 semana que estoy con esto!!!

agradecere cualquier ayuda!
  #2 (permalink)  
Antiguo 04/06/2010, 14:26
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 14 años, 11 meses
Puntos: 1485
Respuesta: No se puede mover el foco hacia el control porque el control es invisible.

he estado viendo como se genera el error en iexplorer y sucede, tal como dice el mensaje de error, cuando se le intenta mover el foco (metodo focus) a un elemento inhabilitado o escondido. entonces, claramente antes de mover el foco tienes que hacerlo visible o habilitar el control. supongo que eso es lo que intentas hacer aqui $("#canal").attr("disabled",false);. ahora bien, no estoy familiarizado con las librerias pero... ¿como funciona el metodo attr? es decir, ¿el metodo trabaja a base de propiedades tal como element.attribute o utiliza metodos del DOM tal como element.setAttribute()? esto es importante porque si es la segunda forma, element.setAttribute("disabled", false) -al menos en iexplorer parece ser- es el equivalente de convertir el booleano a string de modo que produce un atributo tal que disabled="false". por tanto, una vez el atributo este presente el navegador lo considera como inhabilitar el control incluso si es un string vacio. si quieres hacerlo desde la libreria tienes que buscar una funcion que sea explicitamente para eliminar atributos del elemento. o sea, un equivalente del metodo DOM removeAttribute.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 04/06/2010, 14:35
 
Fecha de Ingreso: junio-2008
Mensajes: 137
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: No se puede mover el foco hacia el control porque el control es invisible.

Si, yo tambien pense lo mismo en un momento, pero deshabilitando completamente el cambio de atributos (esto es: eliminando toda line de cambio de atributo y tratando el select directamente) sigue sin funcionar.

Yo creo que el problema esta en el FOR, ya que es ahi donde el script deja de funcionar.

Una cosa mas!

Hay otra funcion que no funciona en IE, esa es:

Código:
function limpiarCanales() {
        var i = canal.length;
        while (i > 1) {                  
                canal.remove(canal.options[i]);
                i--;
        }
        canal.options[0]=new Option("Select Channels..");
}
Tambien esta la opcion de que por alguna razon, IE toma a "canal" como una variable simple y llana en vez de un objeto SELECT.
En el warning del IE aparece un comentario del estilo:
Cita:
'canal' is undefined
  #4 (permalink)  
Antiguo 04/06/2010, 14:39
 
Fecha de Ingreso: junio-2008
Mensajes: 137
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: No se puede mover el foco hacia el control porque el control es invisible.

Ahi esta lo que les decia:
  #5 (permalink)  
Antiguo 04/06/2010, 14:52
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 14 años, 11 meses
Puntos: 1485
Respuesta: No se puede mover el foco hacia el control porque el control es invisible.

respecto a tu primera consulta, aqui un ejemplo del codigo que intente.
Código:
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Test Development</title>
<script type='text/javascript'>
self.onload = function(){
var select = document.getElementsByTagName("select")[0];
for(var i = 1; i < 10; i++) select[i] = new Option(i,i);
select.disabled = false;
select.focus();
}
</script>
<style type='text/css'>

</style>
</head>

<body>
<select disabled="disabled"><option value="0">0</option></select>
</body></html>
si el problema es en el bucle, entonces debe ser que no estas esperando a la respuesta de AJAX. para eso, tienes que hacer la peticion sincronizada. es decir, el tercer parametro de open con valor false.

respecto a tu segunda consulta, el error debe ser porque la variable canal no existe en ningun lugar de tu codigo. tienes que definirla antes de usuarla.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 04/06/2010, 14:54
 
Fecha de Ingreso: junio-2008
Mensajes: 137
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: No se puede mover el foco hacia el control porque el control es invisible.

Cita:
Iniciado por zerokilled Ver Mensaje
respecto a tu segunda consulta, el error debe ser porque la variable canal no existe en ningun lugar de tu codigo. tienes que definirla antes de usuarla.
Pero canal no es una variable, es el identificador del SELECT! de hecho, fijate como lo estoy utilizando.

canal.remove(canal.options[i]);
canal.options[i]=new Option(i, i);


Y estoy utiilizando False para la peticion.
  #7 (permalink)  
Antiguo 04/06/2010, 14:57
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 14 años, 11 meses
Puntos: 1485
Respuesta: No se puede mover el foco hacia el control porque el control es invisible.

no deberias considerar los identificadores como variables ya definidas. eso es un metodo no estandar y solo admitido por iexplorer. aun asi te esta dando el fallo en iexplorer, pero de todos modos no es lo correcto. debes obtener la referencia del SELECT por su id con getElementById u otro modo disponible.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: control, foco, invisible, mover
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:07.