Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Juninho De Luca_54619

[Resolvido] Autocomplete c/ jQuery/php/MySQL

Recommended Posts

Olá pessoal,

Estou desenvolvendo uma aplicação bastante prática, utilizando o jQuery com PHP e MySQL.

Vou tentar explicar a questão: na primeira versão, o autocomplete buscava pela descrição do produto.

Agora, o autocomplete buscará pelo código, preenchendo automaticamente o input txt com a descrição referente.

A questão é que eu tenho um arquivo usr.php para 13 compradores e cada um possui um número diferente de produtos que deve dar entrada. Para a definição do número de campos, estou usando o

for ($i=1; $i<=5; $i++){

onde 5 é o número de linhas da tabela de cada comprador.

 

Por padrão, o autocomplete do jQuery busca referência de entrada a partir do id do input. Na primeira versão eu troquei o id ("#" que é único) por classe de estilo ("." que é referencial e permite multiplicidade) e assim não precisei usar um for() para cada linha da tabela de cada comprador.

 

O problema é que agora tentei o mesmo workaround e qdo o autocomplete busca os resultados, ele preenche TODOS os campos da tabela de forma igual hehehe. Abaixo vou postar o momento em que parei: utilizando o ID do input, mas que só ativa o autocomplete, obviamente, na primeira linha da tabela.

 

resumo do usr.php

<script type="text/javascript">
$(document).ready(function(){
	var ac_config = {
		source: "ac-src.php",
		select: function(event, ui){
			$("#codigo").val(ui.item.codigo);
			$("#descricao").val(ui.item.descricao);
			return false;
		},
		minLength:1
	};
	$("#codigo").autocomplete(ac_config);
});
</script>

<body bgcolor="#ffffff">
<br />
<br />
<form name="form<?php echo $usr; ?>" method="post" action="s.php?usr=<?php echo $usr; ?>">
<table>

<?php 	

if ($usr == '08'){
for ($i=1; $i<=5; $i++) {
 $r = mysql_query("SELECT * FROM descricao_teste WHERE descricao_teste.ID='$i'") or die(mysql_error());
 $arr = mysql_fetch_array($r);			
 echo"<tr>";
 echo"<td><input class=\"ui-widget\" type=\"text\" name=\"COD_PAI_".$i."\" size=\"5\" value=\"".$arr['COD_PAI']."\" maxlength=\"7\" id=\"codigo\" /></td>";
 echo"<td><input class=\"ui-widget\" type=\"text\" name=\"DESCRICAO_".$i."\" size=\"35\" value=\"".$arr['DESCRICAO']."\" id=\"descricao\" /></td>";	
  }
}

?>

 

 

resumo do ac-src.php

<?php
$q = "SELECT * FROM descricao WHERE descricao.COD_PAI IS NOT NULL";

$r = mysql_query($q) or die(mysql_error());

$codigos = array();
while($arr = mysql_fetch_array($r)) {

$cod_pai = $arr['COD_PAI'];	
$descricao = $arr['DESCRICAO_PRODUTO'];

$mount_arr = array("codigo" => "$cod_pai", descricao => "$descricao");		
$codigos[] = $mount_arr;		

}

$term = trim(strip_tags($_GET['term']));

$matches = array();
foreach($codigos as $codigo){
if(stripos($codigo['codigo'], $term) !== false){

	$codigo['value'] = $codigo['codigo'];
	$codigo['label'] = "{$codigo['codigo']}";
	$matches[] = $codigo;

	}	
}

$matches = array_slice($matches, 0, 10);
print json_encode($matches);

?>

 

 

Então... o que eu preciso é saber: se o número de linhas é variável, como posso fazer para que o autocomplete prencha apenas uma linha de cada vez?

Valeu galera!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

desculpa minha ignorância mais eu não entendi sua duvida :(

 

Eu uso o autocomplete sempre associado ao .keyup() do input, assim eu posso fazer uma requisição GET/POST antes formatando os dados em XML e a partir dai exibindo no autocomplete.

 

Olha:

 


$("#auto").keyup(function(){
       $.get("../negocio/search.php", {term:$("#auto").val(),status:$("#radio:checked").val()}, 
              function(resposta) {
                       var data = $( "aluno", resposta ).map(function() {
                           return {
                                   value: $( "value", this ).text() 
                           };
                       }).get();
                   $('#auto').autocomplete(
                   {
                       source: data

                   });
                   });
               });


 

 

Espero ter ajudado de alguma forma :/

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande Luiz Felipe!

Muito obrigado! Teu exemplo eu não conhecia não, valeu mesmo.

Mas ainda não era isso que eu precisava. Então... desculpe se não fui claro.

Vou tentar explicar de novo, na prática. As vezes o problema é tão simples que eu

não estou conseguindo enxergar =]

Eu tenho um formulário que possui um número variável de linhas de campos para preencher.

Como se fosse uma tabela de BD mesmo..

 

ID----COD----DESCRICAO----CUSTO----PROMOCAO----MARGEM

1----[...]--[.........]---[....]...[......]....[.....]

2----[...]--[.........]---[....]...[......]....[.....]

3----[...]--[.........]---[....]...[......]....[.....]

4----[...]--[.........]---[....]...[......]....[.....]

 

hehehehe imagina o [....] como sendo o field fo input, ok?

mas poderia ter até 40 linhas, de acordo com a pessoa que está comprando.

 

Por padrão, o autocomplete (isso vale para o exemplo que você postou tb) busca e

preenche os campos por meio do id=" " do input. No meu caso, a ideia é inserir o COD e o

autocomplete preencher o campo COD e o DESCRICAO.

 

O problema é que o id=" " é único e, se eu fizer dessa forma o autocomplete só funfa na

primeira linha. Se eu uso a identificação pela classe de estilo (class="cod") que poderia

ser aplicada para todas as linhas, quando faço o preenchimento do primeiro campo COD, o autocomplete

preenche TODOS os campos COD com o mesmo valor e TODAS as DECRIÇÕES como mesmo valor tb. heuehuehu

 

Eu queria que fossem consultas individuais, tipo:

começa a digitar na primeira linha, preenche o primeiro COD e DESCRIÇÃO... depois quando chega na

segunda linha faz um autocomplete para aquela linha.

 

Espero que agora tenha conseguido explicar o problema =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver!

Separei o script do autocomplete em um arquivo ac-usr.php e chamei via include.

 

No ac-usr.php tinha

if ($usr == '08'){
for ($i=1; $i<=5; $i++) {

echo"\n<script type=\"text/javascript\">\n";
echo"\t$(document).ready(function(){\n";
	echo"\t\tvar ac_config = {\n";
	echo"\t\tsource: \"ac-src.php\",\n";
		echo"\t\t\tselect: function(event, ui){\n";
			echo"\t\t\t\t$(\"#codigo" . $i . "\").val(ui.item.codigo);\n";
			echo"\t\t\t\t$(\"#descricao" . $i . "\").val(ui.item.descricao);\n";
			echo"\t\t\t\treturn false;\n";
		echo"\t\t\t},\n";
		echo"\t\tminLength:1\n";
	echo"\t};\n";
	echo"\t$(\"#codigo" . $i . "\").autocomplete(ac_config);\n";
echo"});\n";
echo"</script>\n";

}
}

 

 

O segredo estava no val(ui.item.codigo)... eu nao precisava colocar o $i neles =]

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.