Foros del Web » Programando para Internet » Javascript »

problema con document.getElementById

Estas en el tema de problema con document.getElementById en el foro de Javascript en Foros del Web. Hola a todos. Mi nombre es Moises y este es mi primer post, así que si no es el lugar correcto donde postear les agradeciera ...
  #1 (permalink)  
Antiguo 21/01/2011, 13:24
 
Fecha de Ingreso: enero-2011
Mensajes: 2
Antigüedad: 13 años, 10 meses
Puntos: 0
problema con document.getElementById

Hola a todos.

Mi nombre es Moises y este es mi primer post, así que si no es el lugar correcto donde postear les agradeciera que me lo indicaran.

Bueno mi problema es el siguiente:
Estoy mostrando información dinámica en un div con ajax, mediante ajax solicito al servidor código html que coloco en div de la siguiete forma:

Código:
function carga_datos(){
	if(window.IdSol==undefined)	return;
	var divP = document.getElementById('dvDoc');
	
	var ajax=objetoAjax();
	ajax.open("POST", "php/get_update_docs.php",true);
	ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
			divP.innerHTML=ajax.responseText;			
		}
	}

	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");


	ajax.send("IdSol="+IdSol);
}


...
carga_datos();

if(escAux!=""){
	xField = document.getElementById("slcInst");
	if(xField!=undefined) xField.value=escAux;
}
...
y el codigo php que me regresa el html es:

Código PHP:

...
echo 
'<div id="dvInst">';
echo 
'<table>';
echo 
'<tr>';
echo 
'<td><div align="left">Instituci&oacute;n:</div></td>';
echo 
'<td><select name="slcInst" id="slcInst" size="1">'.lstPlanteles().'</select><span class="Estilo4">*</span></td>';
echo 
'</tr>';
echo 
'</table>';
echo 
'</div>';

echo 
"<div align='left'>Documentos anexos:</div>";
echo 
"        <table width=\"1060\" >";
echo 
"          <tr>";
echo 
"            <td width=\"515\"><div align=\"left\">Originales:</div></td>";
echo 
"            <td width=\"10\">&nbsp;</td>";
echo 
"            <td width=\"513\"><div align=\"left\">Copias:</div></td>";
echo 
"          </tr>";
... 

Cuando trato de obtener el objeto "slcInst" con document.getelementById me dice el navegador lo siguiente:

Error: document.getElementById("slcInst") is null

Pero si existe porque en el navegador puedo ver el combobox.

Y haciendo pruebas coloque un alert para ver el contenido de la variable "escAux" de la siguiente forma:

Código:
...
if(escAux!=""){
        alert(escAux);
	xField = document.getElementById("slcInst");
	if(xField!=undefined) xField.value=escAux;
}
...
Lo raro es que después de eso, ya no me mando error y ya pude obtener el objeto y seleccionar un elemento de la lista, pero si quito el alert sigue marcando el mismo error.

Alguien me podría ayudar a resolver el problema o indicarme donde buscar.

De antemano gracias.
  #2 (permalink)  
Antiguo 21/01/2011, 13:38
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: problema con document.getElementById

Hola:

No estarás duplicando los "id's"... y tal vez usando explorer...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 21/01/2011, 14:30
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 18 años
Puntos: 122
Respuesta: problema con document.getElementById

esta parte:

Código Javascript:
Ver original
  1. if(escAux!=""){
  2.     xField = document.getElementById("slcInst");
  3.     if(xField!=undefined) xField.value=escAux;
  4. }

la tienes que mover dentro de:
Código Javascript:
Ver original
  1. if (ajax.readyState==4) {
  2. ...
  3. }

Justo después de haber insertado el contenido obtenido del servidor. Recuerda que ajax es asíncrono por lo que el interprete no espera a que tu función carga_datos inyecte el contenido antes de ejecutar el if()

La razón por la que el error no aparece con el alert, es por que el alert detiene la ejecución de tu código y da tiempo a que el servidor mande los datos y estos sean inyectados en tu documento.

Eso es lo que yo creo que está sucediendo.
__________________
twitter: @imbuzu
  #4 (permalink)  
Antiguo 21/01/2011, 14:55
 
Fecha de Ingreso: enero-2011
Mensajes: 2
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: problema con document.getElementById

Efectivamente era eso, se me olvido que ajax es asincrono, y tenia que esperar a que el servidor me respondiera.

Gracias buzu...
  #5 (permalink)  
Antiguo 23/01/2011, 15:20
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 18 años
Puntos: 122
Respuesta: problema con document.getElementById

Me alegro que se haya resuelto tu problema. Siempre hay que tener en cuenta ese tipo de comportamientos del lenguaje. Tenerlos presentes nos puede ahorrar tiempo y dolores de cabeza. Sin embargo, me ha pasado también que una cosa de esas me causa problemas. Aveces no se puede recordar todo al mismo tiempo. :)
__________________
twitter: @imbuzu

Etiquetas: Ninguno
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 10:11.