Ir para conteúdo

Arquivado

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

Gabriel Jansen

Autocomplete e While

Recommended Posts

Bom dia pessoal

 

Estou com um código de autocomplete, com consulta de banco de dados em asp, certinho funcionando filé, eu implementei ele em um sistema de pedidos, ontem o vendedor digita o nome do item, e clicando ele preenche o formulário, até ai ta tudo joia, estou refazendo o formulário para que ele tenha como adicionar mais inputs, como o autocomplete ele precisa de cada id de cada input, ele acaba ficando grande, gostaria de saber se tem como fazer um while ou um for, para que ele repita o script do autocomplete, tentei dessa forma e ele não funciona....

 

 

<script type="text/javascript">
var i = 0;
do{
$(document).ready(function(){
//Ao digitar executar essa função
$("#prod").focus().autocomplete("completa.asp",{
minChars: 1 //Número mínimo de caracteres para aparecer a lista
, matchContains: true //Aparecer somente os que tem relação ao valor digitado
, scrollHeight: 220 //Altura da lista dos nomes
, selectFirst: true //Vim o primeiro da lista selecionado
, mustMatch: false //Caso não existir na lista, remover o valor
, delay: 0 //Tempo para aparecer a lista para 0, por padrão vem 200
});
//Quando selecionar valor pegar retorno. O retorno nesse caso são: Nome|Código
$("#prod").result(function(event, retorno) {
if (retorno==undefined)
$("#preco").val("");
else
$("#preco").val(retorno[1]);
if (retorno==undefined)
$("#prazo").val("");
else
$("#prazo").val(retorno[2]);
if (retorno==undefined)
$("#embalagem").val("");
else
$("#embalagem").val(retorno[3]);
if (retorno==undefined)
$("#valora").val("");
else
var primeiroNum = parseFloat(retorno[1].replace(",","."));
var segundoNum = parseFloat(retorno[3].replace(",","."));
var resp = primeiroNum/segundoNum;
var numero2casas = resp.toFixed(2); //aumenta as casas
$("#valora").val(numero2casas.replace(".",","));
if (retorno==undefined)
$("#valorp").val("");
else
var primeiroNum = parseFloat(retorno[2].replace(",","."));
var segundoNum = parseFloat(retorno[3].replace(",","."));
var resp = primeiroNum/segundoNum;
var numero2casas = resp.toFixed(2); //aumenta as casas
$("#valorp").val(numero2casas.replace(".",","));
});
});
i++;
}while(i <= 10);
</script>

 

Porem não repete ele mais vezes no caso fixei um numero 10 para teste
Agora caso queira as 10, tenho que copiar o mesmo codigo e deixar fixado o numero nos id (#prod0) (#prod1).
Teria alguma forma mais simples de fazer isso?
Obrigado

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum.. o auto complete "não precisa de um ID para cada input".. vc pode trabalhar com classes e navegar no DOM.

 

Ai não tem loop e nem IDs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui fazer com que ele ativasse o autocomplete do produtos, porém o problema é que sempre que gero uma nova consulta(do autocomplete), ele substitui os valores resgatados pela ultima consulta, e em um só input, que estou testando, como poderia colocar sempre em um determinado input? Ex:

Input 1 :

 

[ Produto ] Embalagem: [ Embalagem]

Input 2 :

 

[ Produto ] Embalagem: [ Embalagem]

 

Se eu consulto no 2, o valor da embalagem muda na primeira e não na segunda, estou usando class para os inputs do produto, e class para a embalagem.

 

 

Codigo

 

 

<script type="text/javascript">

$(document).ready(function(){
//Ao digitar executar essa função
$( ".produto" ).focus().autocomplete("completa_consulta.asp",{
minChars: 1 //Número mínimo de caracteres para aparecer a lista
, matchContains: true //Aparecer somente os que tem relação ao valor digitado
, scrollHeight: 100 //Altura da lista dos nomes
, selectFirst: true //Vim o primeiro da lista selecionado
, mustMatch: false //Caso não existir na lista, remover o valor
, delay: 0 //Tempo para aparecer a lista para 0, por padrão vem 200
});

$(".produto").result(function(event, retorno) {
if (retorno==undefined)
$("#embalagem").val("");
else
$("#embalagem").val(retorno[3]);
if (retorno==undefined)
$("#precoavista").val("");

else
$("#precoavista").val(retorno[1]);
});

});


</script>

 

Esse html esta em um for

 

 

<tr class="center">
<td></td>
<td class="center">
<input name="produto<%=i%>" class="produto" id="produto" type="text" style="width: 280px; height: 20px;"/>
</td>
<td class="center">
<input name="precokga" id="precokga" type="text" style="width: 50px; height: 20px;" />
</td>
<td class="center" style="width: 120px">
<input name="precoavista" id="precoavista" type="text" style="width: 50px; height: 20px;" />
</td>
<td class="center">
<input name="precokgp" id="precokgp" type="text" style="width: 50px; height: 20px;" />
</td>
<td class="center" style="width: 120px">
<input name="precoaprazo" id="precoaprazo" type="text" style="width: 50px; height: 20px;" />
</td>
<td class="center">
<input name="embalagem" class="embalagem" id="embalagem"type="text" style="width: 50px; height: 20px;" />
</td>
<td class="center">
<input name="quantidade" id="quantidade" type="text" style="width: 40px; height: 20px;" />
</td>
<td></td>
</tr>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim:

 

 

<script type="text/javascript">

$(document).ready(function(){
    //Ao digitar executar essa função
    $( ".produto" ).focus().autocomplete("completa_consulta.asp",{
         minChars: 1 //Número mínimo de caracteres para aparecer a lista
        , matchContains: true //Aparecer somente os que tem relação ao valor digitado
        , scrollHeight: 100 //Altura da lista dos nomes
        , selectFirst: true //Vim o primeiro da lista selecionado
        , mustMatch: false //Caso não existir na lista, remover o valor
        , delay: 0 //Tempo para aparecer a lista para 0, por padrão vem 200
    });

    $(".produto").result(function(event, retorno) {
        var $parent = $(this).parents('tr');

        if (retorno==undefined) {
            $parent.find('input[name="precoavista"]').val("");
            $parent.find('input[name="embalagem"]').val("");
        }
        else {
            $parent.find('input[name="precoavista"]').val(retorno[1]);
            $parent.find('input[name="embalagem"]').val(retorno[3]);
        }
    });
});


</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

A melhor forma de agradecer é tentar ajudar outra pessoa.

 

Veja os tópicos ainda não resolvidos, e se vc souber, responda lá. :lol:

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.