Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!!!
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 =]
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 =]
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:
Espero ter ajudado de alguma forma :/
Abraço