Retroceder   Foros del Web > Programación para sitios web > AJAX

Respuesta
 
Herramientas Desplegado
Antiguo 04-abr-2007, 18:04   #1 (permalink)
valencia1984 no se puede cailificar en este momento
 
Fecha de Ingreso: febrero-2006
Mensajes: 14
Error: Se requiere un objeto (internet explorer)

Voy a acortar el mensaje anterior... ya que creo que el problema está en la forma de llamar a la función...

Hay alguna diferencia entre :

Código HTML:
<a href="javascript:paginas('index.php?ir=menu_buscar_perfiles&tipo=sencilla&accion=mostrar_index', 'capa_sms_1_completo',200)">Busqueda sencilla</a>
y entre:

Código HTML:
<script type="text/javascript">
paginas('index.php?ir=menu_buscar_perfiles&tipo=sencilla&accion=mostrar_index&provincia_select=ok&pais_id=8','capa_sms_1_completo',200);
</script>
que en la segunda url se añada &provincia_select=ok&pais_id=8 no es importante... Solo se usa para saber que el layer debe de añadir la provincia.

Entonces ¿La segunda llamada a la función le pasa algo?

La única diferencia en la funcionalidad, es que en el primer método, la función paginas() se activa cuando se hace click, y con el segundo método, después de pulsar el desplegable con todos los paises, se redirecciona a la nueva página html (gracias a onchange="document.forms.buskeda_sencilla.action=' index.php?ir=menu_buscar_perfiles&tipo=index&mostr ar_layer=sencilla&provincia_select=ok'; document.forms.buskeda_sencilla.submit()), donde se ejecuta automáticamente la función paginas().




Muchas Gracias (y dejo el mensaje anterior por si os puede aclarar algo...)

----------------------------------
Hola gente!

Estoy jugando un poco con capas para no tener que recargar tantas veces una web que estoy realizando, pero tengo un problemilla..

Estaba utilizando el firefox y no me daba ningún problema, pero se me ocurre probar con el internet explorer, y toma, me da error xD

El error es "Se requiere un objeto" en la linea 385 y se refiere al documento principal, pero.. en el documento html no existen mas de 150 lineas, así que me imagino que se referirá al ".js", que apunta justamente a la última linea... Así que no me aclara nada :S

Os cuento la función que quiero realizar, que es algo compleja xD

1- Desde una página se abren diferentes layers para realizar búsquedas.


Esta es la parte del código importante:
Código HTML:
<div id="capa_sms_1_completo" class="texto_12_negro_bold" align="center" style="z-index:1;top:300;left:280;height:100;width:440;position:absolute;visibility:hidden;"></div>
<div id="capa_sms_2_completo" class="texto_12_negro_bold" align="center" style="z-index:1;top:300;left:280;height:200;width:440;position:absolute;visibility:hidden;"></div>
<div id="capa_sms_3_completo" class="texto_12_negro_bold" align="center" style="z-index:1;top:300;left:280;height:70;width:440;position:absolute;visibility:hidden;"></div>

<!-- Comienza tabla contenido -->
	<table width="380" height="35" border="0" align="center" cellpadding="0" cellspacing="0">
		<tr>
			<td height="2" bgcolor="#FFFFFF"><img src="images/disenos/base/tit_barra_blanco.gif" width="2" height="2"></td>

	  </tr>
		<tr>
			 <td bgcolor="#333333"><div align="center" class="texto_12_blanco_bold">
			 
				<!-- Comienza tabla 1 columnas -->

					
					<table width="227" border="0" cellspacing="0" cellpadding="0">
					  <tr>
						<td width="20"><div align="center">
							<br><img src="images/disenos/perfil/iconos/search-icon-orange.gif" border="0"><br><img src="images/disenos/perfil/iconos/search-folder-orange.gif" border="0"><br><img src="images/disenos/perfil/iconos/search-grey.gif" border="0">										</td>
						<td width="207"><div align="left">
							<br><a href="javascript:paginas('index.php?ir=menu_buscar_perfiles&tipo=sencilla&accion=mostrar_index', 'capa_sms_1_completo',200)">Busqueda sencilla<br><a href="javascript:paginas('index.php?ir=menu_buscar_perfiles&tipo=avanzado&accion=mostrar_index', 'capa_sms_2_completo',200)">Busqueda avanzada<br><a href="javascript:paginas('index.php?ir=menu_buscar_perfiles&tipo=nick&accion=mostrar_index', 'capa_sms_3_completo',200)">Búsqueda por Nick										</td>
					  </tr>

					</table> 
				<!-- Termina tabla 2 columnas -->
			 <br><br></div></td>
	  </tr>
		<tr>
			<td width="350" height="2" bgcolor="#FFFFFF"><div align="center"><img src="images/disenos/base/tit_barra_blanco.gif" width="2" height="2"></div></td>
	  </tr>
	</table>

<!-- Termina tabla contenido -->

2- Cuando se hace click para abrir las búsquedas, se llama a una función en javascript (paginas()) que carga un trozo de página web en una de las 3 capas disponibles.
Hasta aquí todo bien.

3-En 2 capas se puede elegir un páis de procedencia, y cuando se elige el país, se lanza una instancia de tipo:

Código HTML:
 <select class="reg_elegir"  name="pais"  onchange="document.forms.buskeda_avanzada.action='index.php?ir=menu_buscar_perfiles&tipo=index&mostrar_layer=avanzado&provincia_select=ok'; document.forms.buskeda_avanzada.submit()"><option selected value="-1"></option><option  value="4">Alemania</option>
De forma que aparecen la provincias correspondientes, y es aquí donde justamente da el error, al cargarse esta última página.

4- Lo que ocurre al cargarse esa página es que, al ser una web+un layer, necesito volver a cargar el layer de nuevo, y lo hago mediante esto:

Código HTML:
<script type="text/javascript">	paginas("index.php?ir=menu_buscar_perfiles&tipo=avanzado&accion=mostrar_index&provincia_select=ok&pais_id=4","capa_sms_2_completo",200);
</script>
(El país se obtiene gracias a un _POST en php del campo pais)

Todo se hace correctamente, pero el internet explorer me da el error.. Y creo que es por esta última función.


Os pego la parte de código que tengo en el js que se utiliza para estas secciones de la web:

Código HTML:
 //////////////////////////////////////////////
 ///Funciones para las opciones de busqueda////
//////////////////////////////////////////////


// Documento JavaScript
// Esta función cargará las paginas
function paginas (url, id_contenedor, left_sum)
{
    var pagina_requerida = false;
    if (window.XMLHttpRequest)
    {
        // Si es Mozilla, Safari etc
        pagina_requerida = new XMLHttpRequest ();
    } else if (window.ActiveXObject)
    {
        // pero si es IE
        try 
        {
            pagina_requerida = new ActiveXObject ("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            // en caso que sea una versión antigua
            try
            {
                pagina_requerida = new ActiveXObject ("Microsoft.XMLHTTP");
            }
            catch (e)
            {
            }
        }
    } 
    else
    return false;
    pagina_requerida.onreadystatechange = function ()
    {
        // función de respuesta
        cargarpagina (pagina_requerida, id_contenedor,left_sum);
    }
    pagina_requerida.open ('GET', url, true); // asignamos los métodos open y send
    pagina_requerida.send (null);
}
// todo es correcto y ha llegado el momento de poner la información requerida
// en su sitio en la pagina xhtml
function cargarpagina (pagina_requerida, id_contenedor,left_sum)
{
    if (pagina_requerida.readyState == 4 && (pagina_requerida.status == 200 || window.location.href.indexOf ("http") == - 1))
    document.getElementById (id_contenedor).innerHTML = pagina_requerida.responseText;
    
    //Cambiamos posicion de la capa segun la resolucion
    layers_posic(id_contenedor,left_sum);
    
    var cuadro = document.getElementById(id_contenedor);
	cuadro.style.visibility = "visible";
	
	//Solución c-tre a usuarios que no cierran
	var guardar;
	//Recorremos las 3 capas para obtener la referencia numérica de la capa a mostrar
	for(var i=1;i<4;i++)
	{
		var cuadro2 = document.getElementById("capa_sms_"+i+"_completo");
		if(id_contenedor == cuadro2)
		{
			guardar=i;
		}
	}
	//Ahora que ya tenemos la referencia numérica, recorremos de nuevo las 3, y hacemos que se muestren todas con hidden salvo la actual.
	for(var j=1;j<4;j++)
	{
		var cuadro3 = document.getElementById("capa_sms_"+j+"_completo");
		if(j != guardar)
		{
			cuadro3.style.visibility = "hidden";
		}
		
	}
	cuadro.style.visibility = "visible";
	
	
}




//Función para modificar la posicion de diferentes layers según la resolución
function layers_posic(id_contenedor, left_sum)
{
	
	var cuadro = document.getElementById(id_contenedor);
	var suma;
	if(screen.width < 900)
	{
		suma = 0 ;
	}
	else if(screen.width < 1024)
	{
		suma = 70 ;
	}
	else if(screen.width < 1200)
	{
		suma = 160 ;
	}
	else if(screen.width < 1400)
	{
		suma = 240 ;
	}
	else if(screen.width < 1500)
	{
		suma = 320 ;
	}
	else
	{
		suma = 400 ;
	}
	cuadro.style.left = left_sum + suma;
}
El código de 2 de las funciones me lo encontré por los foros Y lo he reutilizado para mis necesidades..


Se que es un poco complejo de entender... pero a ver si alguien me puede echar un cable. Lo agradecería muchísimo :D


Gracias!!
valencia1984 está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 14:07.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93