Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > HTML, Javascript y otros
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-08-2007
Avatar de papulo
papulo papulo is offline
Miembro
 
Registrado: ago 2005
Ubicación: Lleida - Cataluña - España -Europa - Planeta tierra - Sistema solar - Via Lactea ...
Posts: 542
Poder: 19
papulo Va por buen camino
AJAX - Funciona en Firefox y no en iexplorer/opera

Veamos, ando programando una aplicación web con PHP,XHTML,CSS y firebird.
A parte, me he metido de lleno con todo el fregado del Ajax (xmlhttprequest).

El caso es que la aplicación, funciona de maravilla con Firefox pero con iexplorer y Opera me falla uno de los apartados.

Es un formulario de texto, en el cual voy entrando caracteres y realizo una búsqueda en nuestra DB de clientes y mediante Ajax me muestra las coincidencias justo en un recuadro (<div id="autocompletediv"> debajo y se recalcula con cada nueva pulsación.

El caso es que salvo con Firefox, con los otros dos no hace nada de nada y no se por que debe fallar (pero ni la mas remota idea, para que mentir ).

Procedo a añadir todo el código pertinente:

Código PHP:
<div style="padding: 10px;">
    <
form method="post" action="index.php">
        <
input id="companyaddressid" name="companyaddressid" style="width: 150px; height: 16px;" type="hidden" value="" onkeypress="" /><br />
        <
input id="yourname" style="width: 150px; height: 16px;" type="text" value="" autocomplete="off" onkeypress="autocomplete(this.value, event)" /><br />
        <
input type="submit" value="Buscar..."  />
    </
form>
</
div>
    <
div id="autocompletediv" class="autocomp"></div
Esta es la porción de código perteneciente al form que en el onkeypress del campo text lanza la función autocomplete.

Código:
    function findPosX(obj){
        var curleft = 0;
        if (obj.offsetParent){
            while (obj.offsetParent){
                curleft += obj.offsetLeft
                obj = obj.offsetParent;
            }
        } else if (obj.x){
            curleft += obj.x;
        }
        return curleft;
    }
    
    function findPosY(obj){
        var curtop = 0;
        if (obj.offsetParent){
            while (obj.offsetParent){
                curtop += obj.offsetTop
                obj = obj.offsetParent;
            }
        } else if (obj.y){
            curtop += obj.y;
        }
        return curtop;
    }
    
    function autocomplete (thevalue, e){
        
        theObject = document.getElementById("autocompletediv");
        
        theObject.style.visibility = "visible";
        theObject.style.width = "152px";
        
        var posx = 0;
        var posy = 0;
        
        posx = (findPosX (document.getElementById("yourname")) + 1);
        posy = (findPosY (document.getElementById("yourname")) + 23);
        
        theObject.style.left = posx + "px";
        theObject.style.top = posy + "px";
        
        var theextrachar = e.which;
        
        if (theextrachar == undefined){
            theextrachar = e.keyCode;
        }
        
        //The location we are loading the page into.
        var objID = "autocompletediv";

        //Take into account the backspace.
        if (theextrachar == 8){
            if (thevalue.length == 1){
                var serverPage = "autocomp.php";
            } else {
                var serverPage = "autocomp.php" + "?sstring=" + thevalue.substr (0, (thevalue.length -1));
            }
        } else {
            var serverPage = "autocomp.php" + "?sstring=" + thevalue + String.fromCharCode (theextrachar);
        }
        
        var obj = document.getElementById(objID);
        xmlhttp.open("GET", serverPage);
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                obj.innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.send(null);
    }

	function setvalue (thevalue, companyaddressid){
		acObject = document.getElementById("autocompletediv");
		
		acObject.style.visibility = "hidden";
		acObject.style.height = "0px";
		acObject.style.width = "0px";
		
		document.getElementById("yourname").value = thevalue;		
		document.getElementById("companyaddressid").value = companyaddressid;
	}
Este es el código de functions.js donde tengo la función de autocompletado y las que necesita. findPosX/Y sirven para detectar als coordenadas sobre las que haremos el autocompletado, autocomplete detecta las entradas de texto y las manda al formulario autocomp.php

Código PHP:
<?php
    
include("lib/libreria_conexiondb.php");
    if (
strlen($_GET['sstring'])>1) {
    
    
//autocomp.php    

    //Consultas que realizaremos contra la DB para buscar coincidencias.
    
$SQL_search_name="SELECT mca.address_company_name AS COMPANY, mca.address, mct.name AS CONTACT, mca.id AS COMPANY_ADDRESS_ID
                      FROM mng_company_address mca inner join  mng_contact mct on mca.id=mct.company_address_id
                      WHERE mct.name like '%"
.$_GET['sstring']."%'";                      
                                       
    
//echo $SQL_search_name;    
    
$SQL_search_name=consulta_managerdb($SQL_search_name);
    
    
$SQL_search_address="SELECT mca.address_company_name AS COMPANY, mca.address, mct.name AS CONTACT, mca.id AS COMPANY_ADDRESS_ID
                         FROM mng_company_address mca inner join  mng_contact mct on mca.id=mct.company_address_id
                         WHERE mca.address like '%"
.$_GET['sstring']."%'";                
    
//echo $SQL_search_address;
    
$SQL_search_address=consulta_managerdb($SQL_search_address);    
    
    
$SQL_search_company="SELECT mca.address_company_name AS COMPANY, mca.address, mct.name AS CONTACT, mca.id AS COMPANY_ADDRESS_ID
                         FROM mng_company_address mca inner join  mng_contact mct on mca.id=mct.company_address_id
                         WHERE mca.address_company_name like '%"
.$_GET['sstring']."%'";                
    
//echo $SQL_search_company;
    
$SQL_search_company=consulta_managerdb($SQL_search_company);
    
    
?>
                      
                      
    <div style="background: #CCCCCC;">                 
    <?php
    
while ($fila ibase_fetch_object ($SQL_search_name)){    
    
?>
            
            <div class="searchname" onclick="setvalue ('<?php echo $fila->COMPANY?>','<?php echo $fila->COMPANY_ADDRESS_ID?>')"><?php echo $fila->COMPANY." - ".$fila->ADDRESS." - "?><strong><?php echo $fila->CONTACT?><br /></strong></div><?php
                
}
            
?>
    <?php
    
while ($fila ibase_fetch_object ($SQL_search_address)){    
    
?>        
        
            <div class="searchaddress" onclick="setvalue ('<?php echo $fila->COMPANY?>','<?php echo $fila->COMPANY_ADDRESS_ID?>')"><?php echo $fila->COMPANY." - "?><strong><?php echo $fila->ADDRESS?><br /></strong></div><?php
                
}
            
?>
    <?php            
    
while ($fila ibase_fetch_object ($SQL_search_company)){    
    
?>        
        
            <div class="searchcontact" onclick="setvalue ('<?php echo $fila->COMPANY?>','<?php echo $fila->COMPANY_ADDRESS_ID?>')"><strong><?php echo $fila->COMPANY?></strong><?php echo " - ".$fila->ADDRESS?><br /></div><?php
                
}
                }
            
?>
        </div>
En autocomp.php voy buscando coincidencias entre los caracteres que entro y los datos de la DB, luego los resultados los devuelvo y con la función setvalue que acaba rellenando los campos que necesito y al darle al boton submit ya me recarga la página con los datos que acabo de darle.

Cuando no va, no llega ni a realizar el amago de autocompletado.

No se por donde pillarlo, la verdad, pero bueno, espero que alguien arroje un poco de luz sobre todo este asunto.

Saludos.
__________________
"El aprendizaje potencia la intuición"
Yo mismo, en un momento de inspiración. v2.0
Responder Con Cita
  #2  
Antiguo 21-08-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Hace un tiempo me pasó algo parecido: un programa JavaScript que funcionaba en Firefox y en ningún otro navegador. Al final resultó que olvidé poner un carácter ">" para cerrar una etiqueta dentro del código JavaScript. Vamos, que en lugar de escribir:
Código PHP:
document.write ("</td>"); 
escribí
Código PHP:
document.write("</td"); 
o algo así, no recuerdo exactamente.

No sé si será tu mismo problema, porque yo de AJAX ni idea, pero merece la pena revisarlo.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 21-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Que risa. Yo la verdad es que no se mucho ni de Javascript ni de php, y la prueba de ello, es que el otro día, dejé offline durante unas horas, una web con la que estoy trabajando, hasta que pude encontrar el problema.
Gran problema por cierto. En php puse algo tal como esto:

Código PHP:
$variable "contenido_variable; 
Se me ovidó o se me pasó las comillas del final, y eso me costó sudores y lagrimas....

Lo que vengo a decir, ratificando lo que comenta Nuño, es que son lenguajes con cierta hostilidad y que no te perdonan nada de nada, ni un pequeño descuido...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #4  
Antiguo 21-08-2007
Avatar de papulo
papulo papulo is offline
Miembro
 
Registrado: ago 2005
Ubicación: Lleida - Cataluña - España -Europa - Planeta tierra - Sistema solar - Via Lactea ...
Posts: 542
Poder: 19
papulo Va por buen camino
Pues a revisar el código, a ver si encuentro algún detallito.

Ya os contaré...
__________________
"El aprendizaje potencia la intuición"
Yo mismo, en un momento de inspiración. v2.0
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Microsot dice: usar Firefox u Opera Casimiro Notevi Noticias 18 14-02-2007 20:34:31
Policías americanos se entrenan en los secretos de Opera y Firefox Sasuke_Cub Noticias 1 04-09-2005 19:39:40
Página principl no funciona con Firefox... Sinaloense Noticias 3 28-10-2004 17:59:30
Manipular el IExplorer Joanna Internet 0 18-05-2004 01:04:01
Refrescar una ventana del IExplorer DarkByte Internet 1 17-05-2004 22:13:30


La franja horaria es GMT +2. Ahora son las 22:38:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi