Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Como implementar funcion Ajax-Autocomplete

Estas en el tema de Como implementar funcion Ajax-Autocomplete en el foro de Javascript en Foros del Web. Buenas parcero Estoy realziando un proyecto en MCV + ORACLE y estoy en un dilema y no puedo hacer lo mas sencillo creo... La idea ...
  #1 (permalink)  
Antiguo 29/09/2014, 15:18
 
Fecha de Ingreso: septiembre-2010
Mensajes: 12
Antigüedad: 14 años, 2 meses
Puntos: 0
Pregunta Como implementar funcion Ajax-Autocomplete

Buenas parcero

Estoy realziando un proyecto en MCV + ORACLE y estoy en un dilema y no puedo hacer lo mas sencillo creo...

La idea es la siguiente, traigo varios valores de una consulta dinamica id, producto, cantidad, etc.

En la columna productos deseo escribir el id del productos y este me debe mostrar al frente el nombre por medio de una funcion ajax. funciona para la primera columna pero de hay para adelante si escribo en el siguiente ya no funciona pues como todos los input que se generan dinamicamente tienen el mismo name e id pues solo me va a mostrar en el primero.

Pues ya hize alguna pruebas secillas para cambiar el nombre e id del input en +1 pero quiero que cuando llege al ajax este haga lo mismo

Espero haber explicado bn

Aqui les dejo una captura






CONTROLADOR
Código PHP:
public function listarProductosAjax()
     {
         
$aux $_POST['q'];
        
// $aux1 = $_GET['id'];
        

         
$m = new Model(Config::$mvc_bd_usuario,
                     
Config::$mvc_bd_claveConfig::$mvc_bd_hostname);

         
$productoajax $m->verProductoAjax($aux);

         
$paramsVerAjax $productoajax;

        

        return 
$paramsVerAjax;
     } 

MODELO
Código PHP:
     public function verProductoAjax($id)
        {
         
$id htmlspecialchars($id);
         
$id1=1;

         
$sql="select PRO_NOMBRE from PRODUCTOS where PRO_ID LIKE '".$id."%'";


         
$result oci_parse($this->conexion,$sql);
         
oci_execute($resultOCI_DEFAULT);
         
//$devolucion = array();

         
$row oci_fetch_array($result);
        echo 
$row['PRO_NOMBRE'];
        
// $row = $result;
        // return $row;
        


VISTAS
Código PHP:
Ver original
  1. <div class="table-responsive">
  2.  <table align="center" class="table table-condensed table-hover">
  3.      <tr>
  4.          <th>#</th>
  5.          <th>Producto</th>
  6.          <th>...</th>
  7.          <th>Cantidad</th>
  8.          <th>Reserva</th>        
  9.          <th>Producto</th>
  10.          <th>Cantidad</th>
  11.          
  12.          <th>Tipo Reserva</th>
  13.          
  14.  
  15.      </tr>
  16.  
  17. <?php
  18.  
  19.  
  20. ?>
  21.   <?php foreach ($paramsPD['productoD'] as $paramsPD1) :?>
  22. <?php
  23.  
  24.  
  25. $nameb="bus";
  26. $sum++;
  27. //$sumando=$sum+1;
  28. $bus=$nameb.$sum;
  29. echo $bus;
  30. ?>
  31.  
  32.      <tr>
  33.          <td><?php echo $paramsPD1['PD_ID'] ?></td>
  34.          <td>        
  35.  
  36.            
  37. [B]          Buscar <input type="text" id="<?php echo $bus ?>"
  38. name="<?php echo $bus ?>" onkeyup="loadXMLDoc()" required /></td>
  39.  
  40.  <td><div id="myDiv"> </div></td>
  41. [/B]
  42.      
  43.          <td><input type="number" name="cantidad" min="1" required placeholder="Cantidad de Productos" class="form-control" id="" size="" value="<?php echo $paramsPD1['PD_CANTIDAD']?>"/></td>
  44.          
  45.  
  46.  
  47. .....
  48.  
  49.        
  50.      </tr>
  51.      <?php endforeach; ?>



Ajax
Código Javascript:
Ver original
  1. function loadXMLDoc()
  2. {
  3. var xmlhttp;
  4.  
  5. var n=document.getElementById('bus1').value;
  6.  
  7. if(n==''){
  8.  document.getElementById("myDiv").innerHTML="";
  9.  return;
  10. }
  11.  
  12. if (window.XMLHttpRequest)
  13.   {// code for IE7+, Firefox, Chrome, Opera, Safari
  14.   xmlhttp=new XMLHttpRequest();
  15.   }
  16. else
  17.   {// code for IE6, IE5
  18.   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  19.   }
  20. xmlhttp.onreadystatechange=function()
  21.   {
  22.   if (xmlhttp.readyState==4 && xmlhttp.status==200)
  23.     {
  24.     document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
  25.     }else{ document.getElementById("myDiv").innerHTML='<img src="load.gif" width="50" height="50" />'; }
  26.   }
  27. xmlhttp.open("POST","index.php?ctl=buscarajax",true);
  28. xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  29. xmlhttp.send("q="+n);
  30. }
  #2 (permalink)  
Antiguo 30/09/2014, 00:35
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Como implementar funcion Ajax-Autocomplete

En lugar de trabajar con el mismo id en la función loadXMLDoc, pásaselo mediante la llamada a la función.

Código PHP:
Ver original
  1. <input type="text" id="<?php echo $bus; ?>"
  2. name="<?php echo $bus; ?>" onkeyup="loadXMLDoc('<?php echo $bus; ?>')" required />

Por otro lado, veo que asignas el mismo valor para el id de los <div> que se generan en el bucle foreach. Creo que deberías de hacer lo mismo que con el id de los <input> y también pasar dicho valor a la función.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 30/09/2014, 07:44
 
Fecha de Ingreso: septiembre-2010
Mensajes: 12
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Como implementar funcion Ajax-Autocomplete

BueBuenas parcero muchas gracias por la colaboracion

estuve probando tu codigo pero no di con la solucion -_-!

con respecto a esta parte de codigo esto algo q puse pero no le pongas cuidado, yo queria implementar para que cada varible bus fuera bus1,bus2..etc. para poder cogerlas en AJAX con un for o algo asi donde coja toda los bus q se crean

$nameb="bus";
$sum++;
//$sumando=$sum+1;
$bus=$nameb.$sum;
echo $bus;


El código original servia *así

Código PHP:
Ver original
  1. * * * *Buscar <input type="text" id="bus"
  2. name="bus" onkeyup="loadXMLDoc()" required /></td>

pero como te decía se hace una consulta a oracle que me trae los datos dinamicamente y yo implemente el auto complete pero obviamente solo me sirve para el primer campo que es bus porque esa es la variable que llega a AJAX pero como de hay para abajo me crea dinamicamente varias *campos con oracle con la misma varible bus pues solo funciona la primera.

osea segundo campo = bus
tercer campo = bus
pero solo funciona la primera
  #4 (permalink)  
Antiguo 30/09/2014, 10:21
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Como implementar funcion Ajax-Autocomplete

Por eso mismo te digo que debes de pasar el id de cada caja de texto a la función, para que no ocurra el conflicto que se te está presentando. En mi anterior respuesta, te indiqué cómo enviar el id a la función, ahora, solo te queda recibir dicho dato en la función y así podrás tomar los valores de las cajas creadas dinámicamente. Probablemente no te haya funcionado la recomendación porque te faltó la implementación en la función. Solo te toca recibirla y tomar a la caja de texto por dicho identificador.

Código Javascript:
Ver original
  1. function loadXMLDoc(id){
  2.     var xmlhttp,
  3.         n = document.getElementById(id).value;
  4.  
  5.     //El resto de la función
  6. }

Como veo que también generas un <div> en el bucle, sería ideal que le asignes un id dinámico, así como lo haces con las cajas de texto y que también se lo pases a la función, quedando todo así:

Código PHP:
Ver original
  1. <?php
  2. $idDiv = 'div' . $sum;
  3. ?>
  4. <input type="text" id="<?php echo $bus; ?>"
  5. name="<?php echo $bus; ?>" onkeyup="loadXMLDoc('<?php echo $bus; ?>', '<?php echo $idDiv; ?>')" required />
  6. <div id="<?php echo $idDiv; ?>"> </div>

Código Javascript:
Ver original
  1. function loadXMLDoc(id, idDiv){
  2.     var xmlhttp,
  3.         n = document.getElementById(id).value;
  4.  
  5.     if (n == ''){
  6.         document.getElementById(idDiv).innerHTML = "";
  7.         return;
  8.     }
  9.  
  10.     if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
  11.         xmlhttp=new XMLHttpRequest();
  12.     }
  13.     else{// code for IE6, IE5
  14.         xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  15.     }
  16.     xmlhttp.onreadystatechange=function(){
  17.         if (xmlhttp.readyState==4 && xmlhttp.status==200){
  18.             document.getElementById(idDiv).innerHTML=xmlhttp.responseText;
  19.         }
  20.         else{
  21.             document.getElementById(idDiv).innerHTML='<img src="load.gif" width="50" height="50" />';
  22.         }
  23.     }
  24.     xmlhttp.open("POST","index.php?ctl=buscarajax",true);
  25.     xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  26.     xmlhttp.send("q="+n);
  27. }

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 30/09/2014 a las 10:30 Razón: Las benditas comillas
  #5 (permalink)  
Antiguo 30/09/2014, 10:31
 
Fecha de Ingreso: septiembre-2010
Mensajes: 12
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Como implementar funcion Ajax-Autocomplete

Muchas gracias por la colaboración parcero, ya encontre una solucion aunque es casi la misma que la que me dejas,

Muchisimas Gracias



Código PHP:
Ver original
  1. <?php foreach ($paramsPD['productoD'] as $paramsPD1) :?>
  2. <?php
  3.  
  4. static $sum = 0;
  5. $sum++;
  6. $bus = 'bus';
  7. $bus .= $sum;
  8. ?>
  9.      <tr>
  10.          <td><?php echo $paramsPD1['PD_ID'] ?></td>
  11.          <td><input type="text" id="<?php echo $bus ?>" name="<?php echo $bus ?>" onkeyup="loadXMLDoc(<?php echo $sum ?>)" required /></td>      
  12.          <td><div id="myDiv<?php echo $sum ?>"></div></td>


Código Javascript:
Ver original
  1. function loadXMLDoc(id)
  2. {
  3. var xmlhttp;
  4.  
  5. //var n=document.getElementById('bus1').value;
  6. var n=document.getElementById('bus' + id).value;
  7.  
  8. if(n==''){
  9.  document.getElementById("myDiv" + id).innerHTML="";
  10.  //document.getElementById("myDiv").innerHTML="";
  11.  return;
  12. }
  13.  
  14. if (window.XMLHttpRequest)
  15.   {// code for IE7+, Firefox, Chrome, Opera, Safari
  16.   xmlhttp=new XMLHttpRequest();
  17.   }
  18. else
  19.   {// code for IE6, IE5
  20.   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  21.   }
  22. xmlhttp.onreadystatechange=function()
  23.   {
  24.   if (xmlhttp.readyState==4 && xmlhttp.status==200)
  25.     {
  26.    
  27.     document.getElementById("myDiv" + id).innerHTML=xmlhttp.responseText;
  28.     }else{ document.getElementById("myDiv" + id).innerHTML='<img src="../web/img/load.gif" width="50" height="50" />'; }
  29.    
  30.   }
  31. xmlhttp.open("POST","index.php?ctl=buscarajax",true);
  32. xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  33. xmlhttp.send("q="+n);
  34. }
  #6 (permalink)  
Antiguo 30/09/2014, 10:36
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Como implementar funcion Ajax-Autocomplete

Y yo creyendo que en $bus se almacenaba el valor del id.

Aunque, viendo bien el código, sí es así.

Código PHP:
Ver original
  1. $nameb="bus";
  2. $sum++;
  3. $bus=$nameb.$sum;
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: ajax, funcion, html, implementar, input, php, select, valor
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 12:59.