Foros del Web » Programando para Internet » Jquery »

Autocompleter + AJAX + live() ? JQUERY!

Estas en el tema de Autocompleter + AJAX + live() ? JQUERY! en el foro de Jquery en Foros del Web. Hola chicos, He indagado en google y a posteriori en el foro, pero no encuentro lo que busco. Tengo un par de dudas, así que ...
  #1 (permalink)  
Antiguo 04/04/2010, 11:56
 
Fecha de Ingreso: abril-2007
Mensajes: 12
Antigüedad: 17 años, 8 meses
Puntos: 0
Pregunta Autocompleter + AJAX + live() ? JQUERY!

Hola chicos,

He indagado en google y a posteriori en el foro, pero no encuentro lo que busco. Tengo un par de dudas, así que iré por pasos:

1º.- Estoy empezando con JQuery y estoy intentando poner un AutoCompleter. Aquí surge la primera duda/problema. Estoy usando la última versión de JQuery (1.4) con JQuery UI (1.8). He buscado en internet y encontré un [URL="http://www.pengoworks.com/workshop/jquery/autocomplete.htm"]AutoCompleter[/URL] que "va" (simplemente). Sin embargo, por las versiones de JQuery que cita, creo que no es muy reciente. No obstante, este Autocompleter me funciona (aunque tengo un problema que detallo en el segundo punto). Indagando más (ya que no me gusta mucho el funcionamiento: no es muy exacto) encontré que JQuery UI tiene un AutoCompleter, pero no creo que no funciona con AJAX (en la docs de jquery sólo ponen Arrays, nada de URLs de backend ni nada). He buscando más, y he encontrado más Autocompleters, pero ya no sé ni de cuando son (2007,2008,2009). Entonces, si alguno tiene alguna sugerencia de algún AutoCompleter que vaya bien. (En este foro hay un par de entradas sobre Autocompleters, pero no son recientes)

2º.- Tengo un formuario en el que puedes introducir una lista de productos (nombre, cantidad, precio) y para hacerlo dinámico, puedes hacer click en un enlace "más" para ir añadiento más productos. Todo OK hasta aquí. Sin embargo, como en el momento de la creación del documento no están creados los inputs, no se crean eventos DOM para los que se van añadiendo a posteriori. He buscado y he encontrado que hay que usar la función live. Sin embargo, la uso, pero no me recarga los DOM al momento de introducir los campos. No sé si lo estoy haciendo bien, puesto que, como dije, soy novato en JQuery.

Aquí tienen el código por si alguien sabe de que hablo.

JS:
Código Javascript:
Ver original
  1. $(document).ready(function (){
  2.  
  3.     $(".autoComplete").autocomplete("http://wwwsandbox/facturas/getNames.php", {selectFirst: true, autoFill: true, minChars: 4, lineSeparator: ';;' });
  4.  
  5.  
  6.     $(function() { // when document has loaded
  7.             var i = $('input').size() + 1; // check how many input exists on the document and add 1 for the add command to work
  8.  
  9.             $('a#moreFields').live('click',function() { // when you click the add link
  10.                     $('<tr id="input'+i+'"><td><input class="autoComplete" type="text" value="" name="producto[]" /></td><td><input type="text" value="" name="cantidad[]" /></td><td><input type="text" value="" name="precio[]" /></td></tr>').appendTo('#productos'); // append (add) a new input to the document.
  11.                     i++;
  12.                     return false;
  13.             });
  14.  
  15.             $('a#lessFields').click(function() { // similar to the previous, when you click remove link
  16.                 if(i > 1) { // if you have at least 1 input on the form
  17.                         $('#input'+(i-1)).remove(); //remove the last input
  18.                         i--;
  19.                         return false;
  20.                 }
  21.             });
  22.     });
  23. });

PHP:
Código HTML:
 <form method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
           <h2>Datos de la factura</h2>
           <p>Factura: <input type="text" value="" name="numFactura" /></p>
           <table id="productos">
               <tr>
                   <td>Producto</td>
                   <td>Cantidad</td>
                   <td>Precio</td>
               </tr>
               <tr>
                   <td><input class="autoComplete" type="text" value="" name="producto[]" /></td>
                   <td><input type="text" value="" name="cantidad[]" /></td>
                   <td><input type="text" value="" name="precio[]" /></td>
               </tr>
           </table>
           <p><a href="#" id="moreFields">Más</a> | <a href="#" id="lessFields">Menos</a></p>
           <h3>Gastos adicionales</h3>
           <p>Igic: <input type="text" name="igic" /></p>
           <p>Aduana: <input type="text" name="aduana" value="12"/></p>
           <p>Paquete Extra: <input type="text" name="paqueteExtra" /></p>
           <p>Descuento: <input type="text" name="descuento" /></p>
           <p><input type="submit" value="Enviar" /></p>
       </form> 
  #2 (permalink)  
Antiguo 04/04/2010, 13:29
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: Autocompleter + AJAX + live() ? JQUERY!

pero para agregar nuevos campos no hace falta el evento live, no hace falta para crearlos
si no funciona el autocompleter es porque no tiene el live pero igual probá asignandole el plugin al crearlos

Código Javascript:
Ver original
  1. $('a#moreFields').click(function() { // when you click the add link
  2.             $('<tr id="input'+i+'"><td><input class="autoComplete" type="text" value="" name="producto[]" /></td><td><input type="text" value="" name="cantidad[]" /></td><td><input type="text" value="" name="precio[]" /></td></tr>').appendTo('#productos'); // append (add) a new input to the document.
  3.             $('tr:last').find('input.autoComplete').autocomplete("http://wwwsandbox/facturas/getNames.php", {selectFirst: true, autoFill: true, minChars: 4, lineSeparator: ';;' });
  4.             i++;
  5.             return false;
  6.         });

ahi cuando agregar el input a la tabla busco el último input con clase autoComplete (o sea el que agregué) y le asigno el autocompleter
  #3 (permalink)  
Antiguo 04/04/2010, 18:14
 
Fecha de Ingreso: abril-2007
Mensajes: 12
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: Autocompleter + AJAX + live() ? JQUERY!

Muchísimas gracias! Ya funciona :D

Etiquetas: ajax, live, autocompletado
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 13:08.