Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 3

passar 2 campos com autocomplete

10-03-2010 20:47

Boa noite.

Encontrei na net esse código para efetuar o auto-completar de um campo texto com jQuery, que por sinal é muito bom.
(quem precisar, é só usar) Na página dinâmica ... :
<!-- funções para AUTO-COMPLETAR -->

<script type="text/javascript" src="../js/jquery-1.4.1.js"></script> <script type="text/javascript">         function lookup(txt_cliente) {                 if(txt_cliente.length == 0) {                         // Hide the suggestion box.                         $('#suggestions').hide();                 } else {                         $.post("rpc.php", {queryString: ""+txt_cliente+""}, function(data){                                 if(data.length >0) {                                         $('#suggestions').show();                                         $('#autoSuggestionsList').html(data);                                 }                         });                 }         } // lookup                 function fill(thisValue) {      // ao perder o foco                 $('#txt_cliente').val(thisValue);                 setTimeout("$('#suggestions').hide();", 200);         }           </script>         <!-- testar campo sem preencimento      --> <script type="text/javascript">         $(document).ready(function(){                                 $(':input').css('border', '2px solid #0000FF');         $('input').blur(function () {                 if ($(this).val()==''){                                 $(this).css('background', '#66FFFF');                         }                                 $('input').focus(function (){                         $(this).css('background', '');                 });                   });         }); </script>   <style type="text/css">         body {                 font-family: Helvetica;                 font-size: 11px;                 color: #000;         }                 h3 {                 margin: 0px;                 padding: 0px;           }           .suggestionsBox {                 position: relative;                 left: 40px;                 margin: -350px 100px 50px 50px;                 width: 250px;                 background-color: #212427;                 -moz-border-radius: 7px;                 -webkit-border-radius: 7px;                 border: 2px solid #000;                 color: #fff;         }                 .suggestionList {                 margin: 0px;                 padding: 0px;         }                 .suggestionList li {                                 margin: 0px 0px 1px 0px;                 padding: 3px;                 cursor: pointer;         }                 .suggestionList li:hover {                 background-color: #659CD8;         } </style> <!-- FIM DOS COMANDOS AUTO-COMPLETE  -->

Remetendo para outro arquivo que faz a busca no banco de dados:

<?php     // PHP5 Implementation - uses MySQLi.     $db = new mysqli('localhost', 'root' ,'', 'contr_escr_adv');          if(!$db) {         // Show error if we cannot connect.         echo 'ERROR: Could not connect to the database.';     } else {         // Is there a posted query string?         if(isset($_POST['queryString'])) {             $queryString = $db->real_escape_string($_POST['queryString']);             // Is the string length greater than 0?             if(strlen($queryString) >0) {                 $query = $db->query("(SELECT cl_id, cl_nome FROM clientes WHERE cl_nome LIKE '$queryString%') ORDER BY cl_nome LIMIT 10")                   or die ("Erro ao executar consulta" . mysql_error());                 if($query) {                     // While there are results loop through them - fetching an Object (i like PHP5 btw!).                     while ($result = $query ->fetch_object()) {                         $nome = utf8_encode($result->cl_nome);    //para aceitar acentuação                         $id_cl = $result->cl_id;                         echo '<li onClick="fill(\'' . $nome .'\');">' . $nome .'</li>';        //     . $id_cl . ' - '                             // pegar e passar o ID do cliente                     }                 } else {                     echo 'ERROR: There was a problem with the query.';                 }             } else {                 // Dont do anything.             } // There is a queryString.         } else {             echo 'There should be no direct access to this script!';         }     } ?>

Até aí, beleza. O que estou precisando, é que além do nome do cliente, ele pegue e PASSE também para um campo hidden, o ID do cliente.

Alguém poderia me dar uma luz? :help :help
Já tentei até por session, na net e nada.
Desde já agradeço.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

passar 2 campos com autocomplete

10-03-2010 20:54

Já tentou repetir todo o bloco do $.post? sendo que dessa vez o arquivo da consulta seria outro, ou, dentro do mesmo em um if específico.
0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 3

passar 2 campos com autocomplete

11-03-2010 18:12

Boa tarde Web e obrigado pela atenção.

Deste modo ainda não tentei, mas, acredito que não seria possível, pois mostrar para o usuário o nome na caixa de texto e o ID do cliente num hiden, ao selecionar o cliente na listagem do auto-completar instantanea e dinamicamente.

Até consegui passar, pela mesma linha, só que, quando o usuário clicar no nome (selecionar), a caixa de texto é preenchida com o nº do ID e isto, para o usuário não significa nada, porém, para o sistema em desenvolvimento, o ID é muito mais importante, especialmente porque vai servir de chave extrangeira na tabela, para relacionamento.

Por session, está pegando o último id e não o que é selecionado pelo usuário, porque não consegui deixá-la dinamicamente, como é o caso do auto-complete.

Também tentei criando uma outra function fill (fill2) e nada.

Bem, resumidamente, teria como passar dois campos (ID e Nome) dinamicamente para esse sistema de autocomplete e como seria?

Obrigado.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17510
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

passar 2 campos com autocomplete

11-03-2010 20:05

Acho que para você passar o valor, teria que repetir todo o bloco, o que talvez não seria viável para você. Ou, retornar para o mesmo input o nome e o id, e explicar. Fora isso teria que estudar todo o script para ver uma solução melhor.

Dá uma olhada nesse post
http://www.codigosnaweb.com/forum/Envia ... _2830.html

Na parte JavaScript tem esse trecho

jQuery.ajax({type: "POST",url: "teste.php",dataType: "html", data: "nome=" + nome + "&senha=" + senha, success: function(response){ jQuery("#retorno").append(response); }, error: function(){ alert("Ocorreu um erro durante a requisição"); } });

Eu repeti ele abaixo mudando só o #retorno para

jQuery("#retorno2").append(response);

E adicionei a div com o id #retorno2, e obtive resultado, ou seja, o resultado foi repetido duas vezes nas divs.
0
A melhor hospedagem para o seu site HostGator!
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 3

passar 2 campos com autocomplete

11-03-2010 22:34

Mais uma vez agradeço sua atenção Web.

Depois de muito matutar, comecei a considerar a sua sugestão. Não exatamente como proposto, mas ao menos a duplicação da função de retorno e PINBA. Consegui. Vou deixar registrado aqui a solução, para o caso de algum outro colega precisar (até eu mesmo no futuro, né, nunca se sabe).
Bem, basicamente é o seguinte. Dupliquei a função fill, ficando assim:

        function fill(nome) {   // ao perder o foco                 $('#txt_cliente').val(nome);                 setTimeout("$('#suggestions').hide();", 200);         }        //até aqui normal - troquei também a variável original de thisValue para nome, em alusão a variável php $nome (que não interferiu em nada).         function fill_2(id_cl){                 $('#id_cliente').val(id_cl);         }             //aqui, na duplicação, a variável utilizada também é uma alusão a $id_cl (idem acima).

E no arquivo rpc.php, alterei a linha para poder chamar a função fill_2, ficando:

                    echo '<li onclick="fill(\'' . $nome . '\'); fill_2(\'' . $id_cl . '\');">' . $nome .'</li>';       //bem aqui, faço a chamada, no evento click do obj. <li>, das duas funções. Fill retorna o nome (visto pelo usuário) e fill_2 retorna o ID (visto somente pelo sistema. 

Deste jeito, consegui jogar no campo texto o nome e no hidden o ID do cliente.

Obrigado a todos em especial ao Web e até mais.
0

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado