Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Me hace el autocompletado sólo en la primera fila.

Estas en el tema de Me hace el autocompletado sólo en la primera fila. en el foro de Javascript en Foros del Web. Hola, he hecho un autocompletado en un código. En dicho código agrego filas en un div donde tengo un input llamado recambio que es donde ...
  #1 (permalink)  
Antiguo 17/03/2013, 12:59
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Me hace el autocompletado sólo en la primera fila.

Hola, he hecho un autocompletado en un código. En dicho código agrego filas en un div donde tengo un input llamado recambio que es donde hago el autocompletado. Pero sólo me hace el autocompletado en la primera fila. Y cuando agrego mas filas ya no lo hace.

funcion agregar filas:
Código Javascript:
Ver original
  1. function agregar() {
  2.    
  3.    var contLin = 3;
  4.    var tr, td, tabla;
  5.  
  6.    tabla = document.getElementById('tabla');
  7.    tr = tabla.insertRow(tabla.rows.length);
  8.    td = tr.insertCell(tr.cells.length);
  9.    td.innerHTML = "<input name='button' type=button onclick='agregar()' value='+' >";
  10.    td = tr.insertCell(tr.cells.length);
  11.    td.innerHTML = "<input name='button' type=button onclick='borrarUltima()' value='-' >";
  12.    td = tr.insertCell(tr.cells.length);
  13.    td.innerHTML = "<input type='text' value='' size='5' >";
  14.    td = tr.insertCell(tr.cells.length);
  15.    td.innerHTML = "<input type='text' name='recambio' id='recambio' size='10' >";
  16.    td = tr.insertCell(tr.cells.length);
  17.    td.innerHTML = "<input type='text' value='' size='25' >";
  18.    td = tr.insertCell(tr.cells.length);
  19.    td.innerHTML = "<input type='text' value='' size='5' >";
  20.    td = tr.insertCell(tr.cells.length);
  21.    td.innerHTML = "<input type='text' value='' size='5' >";
  22.    td = tr.insertCell(tr.cells.length);
  23.    td.innerHTML = "<input type='text' value='' size='5' >";
  24.    td = tr.insertCell(tr.cells.length);
  25.    td.innerHTML = "<input type='text' value='' size='5' >";
  26.    td = tr.insertCell(tr.cells.length);
  27.    td.innerHTML = "<img src='imagenes_menu/untitled.png' width='20' height='20' style='cursor:pointer' />";
  28.    contLin++;
  29. }
  30.  
  31. function borrarUltima() {
  32.    ultima = document.all.tabla.rows.length - 1;
  33.    if(ultima > -1){
  34.       document.all.tabla.deleteRow(ultima);
  35.       contLin--;
  36.    }
  37. }
  38.    </script>

El autocompletado:

Código Javascript:
Ver original
  1. <?php
  2. include("conexion_autocompletado.php");//se incluyen los datos para realizar la conexion a su base de datos
  3. $con2 ="SELECT recambio
  4. FROM  almacen000"; //consulta para seleccionar las palabras a buscar, esto va  a depender de su base de datos//consulta para seleccionar las palabras a  buscar, esto va a depender de su base de datos
  5. $query = mysql_query($con2);
  6. ?>
  7. <script>
  8.    $(function() {
  9.      
  10.       <?php
  11.      
  12.       while($row= mysql_fetch_array($query)) {//se reciben los valores y se almacenan en un arreglo
  13.      
  14.      $elementos[]= '"'.$row['recambio'].'"';
  15.    
  16. }
  17. $arreglo= implode(", ", $elementos);
  18. //junta los valores del array en una sola cadena de texto
  19.  
  20.       ?>  
  21.      
  22.       var availableTags=new Array(<?php echo $arreglo; ?>);//imprime el arreglo dentro de un array de javascript
  23.            
  24.       $( "#recambio").autocomplete({
  25.          minLength: 2,
  26.          source: availableTags
  27.       });
  28.      
  29.    
  30.     $(document).keypress(function(e){
  31.                 switch(e.which)
  32.                 {
  33.                     case 13:  nuevo_cliente(); ///// Enter /////
  34.                              break;
  35.                 }
  36.             });  
  37.      
  38.    });  
  39.    
  40. var popup = null;
  41.       function nuevo_cliente(recambio)
  42.       {
  43.          // Si el popup ya existe lo cerramos
  44.          if(popup!=null)
  45.             popup.close();
  46.  
  47.          // Capturamos las dimensiones de la pantalla para centrar el popup
  48.          altoPantalla = parseInt(screen.availHeight);
  49.          anchoPantalla = parseInt(screen.availWidth);
  50.          
  51.          // Calculamos el centro de la pantalla
  52.          centroAncho = parseInt((anchoPantalla/2))
  53.          centroAlto = parseInt((altoPantalla/2))
  54.    
  55.          // dimensiones del popup
  56.          anchoPopup = 500;
  57.          altoPopup = 200;
  58.  
  59.          // Calculamos las coordenadas de colocación del Popup
  60.          laXPopup = centroAncho - parseInt((anchoPopup/2))
  61.          laYPopup = centroAlto - parseInt((altoPopup/2))
  62.          
  63.          
  64.             var recambio = $('#recambio') .val();
  65.    
  66.    
  67.          // Definimos que página vamos a ver
  68.          pagina = "buscar_recambio.php?id=" +recambio;
  69.          
  70.          popup  = window.open(pagina,"Imagenes","scrollbars=yes,status=no,width=" +  anchoPopup + ", height=" + altoPopup + ",left = " + laXPopup + ",top = "  + laYPopup);
  71.    
  72. }
  73. </script>


El div donde agrego las filas:

Código HTML:
Ver original
  1. <div class="albaran">
  2. <table id="tabla">
  3. <tr class="cab_factura">
  4.      <td class="enlace10"></td>
  5.     <td class="enlace10"></td>
  6.     <td class="enlace10">Almacén</td>
  7.     <td class="enlace10">Referencia</td>
  8.     <td class="enlace10">Descripción</td>
  9.     <td class="enlace10">Cantidad</td>
  10.     <td class="enlace10">Precio</td>
  11.     <td class="enlace10">%Dto.</td>
  12.     <td class="enlace10">Total</td>
  13.     <td class="enlace10"></td>
  14.   </tr>
  15.  
  16. <tr>
  17.    <td><input name="button" type=button onclick="agregar();" value="+"  /></td>
  18.    <td><input name="button" type=button onclick="borrarUltima();" value="-"/></td>
  19.     <td ><input name="almacen" type="text" size="5"  /></td>
  20.     <td><input name="recambio" id="recambio" type="text" size="10"/></td>
  21.     <td><input name="descripcion" type="text" size="25"  /></td>
  22.     <td><input name="cantidad" type="text" size="5"  /></td>
  23.     <td><input name="precio" type="text" size="5"  /></td>
  24.     <td><input name="descuento" type="text" size="5"  /></td>
  25.     <td><input name="total" type="text" size="5" /></td>
  26.      <td><img src="imagenes_menu/untitled.png"  onclick="nuevo_cliente();" width="20" height="20" style="cursor:pointer"  /></td>
  27.   </tr>
  28. </div>

Gracias y un saludo
  #2 (permalink)  
Antiguo 18/03/2013, 07:05
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 5 meses
Puntos: 16
Respuesta: Me hace el autocompletado sólo en la primera fila.

Es lógico que te funcione sólo con el primer caso, porque tienes un problema con los identificadores, recuerda que un grupo de objetos se pueden asociar (y de hecho el DOM así lo hace) en un arreglo cuando comparten el atributo name pero el atributo id (identificador) debe ser único para cada caso, de no ser así, sólo el primer objeto con un identificador "recambio" en este caso, responde a los llamados por id. En tu código accedes al objeto mediante "#recambio" (el cual hace el llamado justamente mediante el atributo "id" del objeto HTML) por lo que sólo te muestra el primer objeto cuyo identificador es "recambio". Intenta haciendo el llamado con algo del tipo "input[name=recambio]" lo cual seleccionará todos los obtejos input cuyo atributo name="recambio".

Espero te ayude la explicación anterior.

Saludos

PD: no estoy 100% seguro de que funcione, porque estás agregando objetos de forma dinámica.
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #3 (permalink)  
Antiguo 18/03/2013, 13:44
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Me hace el autocompletado sólo en la primera fila.

Cita:
Iniciado por El_Metallick Ver Mensaje
Es lógico que te funcione sólo con el primer caso, porque tienes un problema con los identificadores, recuerda que un grupo de objetos se pueden asociar (y de hecho el DOM así lo hace) en un arreglo cuando comparten el atributo name pero el atributo id (identificador) debe ser único para cada caso, de no ser así, sólo el primer objeto con un identificador "recambio" en este caso, responde a los llamados por id. En tu código accedes al objeto mediante "#recambio" (el cual hace el llamado justamente mediante el atributo "id" del objeto HTML) por lo que sólo te muestra el primer objeto cuyo identificador es "recambio". Intenta haciendo el llamado con algo del tipo "input[name=recambio]" lo cual seleccionará todos los obtejos input cuyo atributo name="recambio".

Espero te ayude la explicación anterior.

Saludos


PD: no estoy 100% seguro de que funcione, porque estás agregando objetos de forma dinámica.
Gracias por contestar. Ademas de lo que comentas tambien tenia algún error mas. Lo he puesto así pero sigue sin funcionarme:

Código Javascript:
Ver original
  1. function agregar() {
  2.    
  3.     var contLin = 3;
  4.     var tr, td, tabla;
  5.  
  6.     tabla = document.getElementById('tabla');
  7.     tr = tabla.insertRow(tabla.rows.length);
  8.     td = tr.insertCell(tr.cells.length);
  9.     td.innerHTML = "<input name='button' type=button onclick='agregar()' value='+' >";
  10.     td = tr.insertCell(tr.cells.length);
  11.     td.innerHTML = "<input name='button' type=button onclick='borrarUltima()' value='-' >";
  12.     td = tr.insertCell(tr.cells.length);
  13.     td.innerHTML = "<input type='text' value='' size='5' >";
  14.     td = tr.insertCell(tr.cells.length);
  15.     td.innerHTML = "<input type='text' name='recambio1' id='recambio1' size='10' >";
  16.     td = tr.insertCell(tr.cells.length);
  17.     td.innerHTML = "<input type='text' value='' size='25' >";
  18.     td = tr.insertCell(tr.cells.length);
  19.     td.innerHTML = "<input type='text' value='' size='5' >";
  20.     td = tr.insertCell(tr.cells.length);
  21.     td.innerHTML = "<input type='text' value='' size='5' >";
  22.     td = tr.insertCell(tr.cells.length);
  23.     td.innerHTML = "<input type='text' value='' size='5' >";
  24.     td = tr.insertCell(tr.cells.length);
  25.     td.innerHTML = "<input type='text' value='' size='5' >";
  26.     td = tr.insertCell(tr.cells.length);
  27.     td.innerHTML = "<img src='imagenes_menu/untitled.png' width='20' height='20' style='cursor:pointer' />";
  28.     contLin++;
  29.    
  30.    
  31.    
  32. }
  33.  
  34. $( "#recambio1").autocomplete({
  35.             minLength: 2,
  36.             source: availableTags
  37.         });
  38.  
  39. function borrarUltima() {
  40.    ultima = document.all.tabla.rows.length - 1;
  41.    if(ultima > -1){
  42.       document.all.tabla.deleteRow(ultima);
  43.       contLin--;
  44.    }
  45. }
  46.    </script>


Un saludo


EDITO: Tenia que repetir otra vez todo en la funcion agregar.

Código Javascript:
Ver original
  1. function agregar() {
  2.    
  3.     var contLin = 3;
  4.     var tr, td, tabla;
  5.  
  6.     tabla = document.getElementById('tabla');
  7.     tr = tabla.insertRow(tabla.rows.length);
  8.     td = tr.insertCell(tr.cells.length);
  9.     td.innerHTML = "<input name='button' type=button onclick='agregar()' value='+' >";
  10.     td = tr.insertCell(tr.cells.length);
  11.     td.innerHTML = "<input name='button' type=button onclick='borrarUltima()' value='-' >";
  12.     td = tr.insertCell(tr.cells.length);
  13.     td.innerHTML = "<input type='text' value='' size='5' >";
  14.     td = tr.insertCell(tr.cells.length);
  15.     td.innerHTML = "<input type='text' name='recambio1' id='recambio1' size='10' >";
  16.     td = tr.insertCell(tr.cells.length);
  17.     td.innerHTML = "<input type='text' value='' size='25' >";
  18.     td = tr.insertCell(tr.cells.length);
  19.     td.innerHTML = "<input type='text' value='' size='5' >";
  20.     td = tr.insertCell(tr.cells.length);
  21.     td.innerHTML = "<input type='text' value='' size='5' >";
  22.     td = tr.insertCell(tr.cells.length);
  23.     td.innerHTML = "<input type='text' value='' size='5' >";
  24.     td = tr.insertCell(tr.cells.length);
  25.     td.innerHTML = "<input type='text' value='' size='5' >";
  26.     td = tr.insertCell(tr.cells.length);
  27.     td.innerHTML = "<img src='imagenes_menu/untitled.png' width='20' height='20' style='cursor:pointer' />";
  28.     contLin++;
  29.  
  30. $(function() {
  31.        
  32.         <?php
  33.        
  34.         while($row= mysql_fetch_array($query)) {//se reciben los valores y se almacenan en un arreglo
  35.        
  36.       $elementos[]= '"'.$row['recambio'].'"';
  37.      
  38. }
  39. $arreglo= implode(", ", $elementos);//junta los valores del array en una sola cadena de texto
  40.  
  41.         ?>    
  42.        
  43.         var availableTags=new Array(<?php echo $arreglo; ?>);//imprime el arreglo dentro de un array de javascript
  44.                
  45.         $( "#recambio1").autocomplete({
  46.             minLength: 2,
  47.             source: availableTags
  48.         });
  49.        
  50.    
  51.    }
  52. }
  53.    </script>


Gracias

Última edición por satjaen; 18/03/2013 a las 14:11
  #4 (permalink)  
Antiguo 18/03/2013, 15:29
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 5 meses
Puntos: 16
Respuesta: Me hace el autocompletado sólo en la primera fila.

veamos, a lo que me refiero es la forma mediante la cual accedes al objeto, concretamente en esta parte del código:

Código:
        $("#recambio1").autocomplete({
            minLength: 2,
            source: availableTags
        });
Repazando algo de jQuery, el # se utiliza para hacer referencia al atributo id de los objetos HTML. Como el id es un identificador ÚNICO (o al menos así debería ser), DOM reconoce sólo el primer elemento con un id determinado, los demás cuyos ids sean el mismo, no serán visibles al momento de rescatarlos por dicho atributo. Es por este motivo que te propuse recatar los elementos por otro atributo como puede ser el name. Y para el caso aún más puntual, te dí la línea "input[name=recambio]" que buscará sólo entre los objetos del tipo input aquellos que tengan el atributo name con el valor "recambio". Esto en código quedaría algo así:

Código:
        $("input[name=recambio]").autocomplete({
            minLength: 2,
            source: availableTags
        });
Espero te sea de ulitilidad, ya me comentarás como te va.

Saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!

Etiquetas: autocompletado, funcion, html, input, php, primera, select
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 05:49.