Carlos Rocha Posted April 2, 2012 Report Share Posted April 2, 2012 (edited) Estou usando um script para completar um input type="text".// JavaScript Document //fruits = new Array('cleber','mamao','melancia','mercadoria','marmelada'); //names = new Array('tom','dick','harry','john','petter','foo','bar'); function autocomplete(n,ac_array){ if (n.value == "") return 0; if (event.keyCode == 8 && n.backspace){ n.value = n.value.substr(0,n.value.length-1); n.backspace = false; } var r = n.createTextRange(); tmp= n.value; if (tmp == "")return 0; for (z=0;z<ac_array.length;z++){ tmp2 = ac_array[z]; count = 0; for (i = 0;i<tmp.length;i++){ if (tmp2.charAt(i) == tmp.charAt(i)){ count++ } } if (count == tmp.length){ diff = tmp2.length - tmp.length; if (diff <= 0) break; kap = ""; for (i=0;i<tmp2.length;i++){ if (i >= tmp.length) kap += tmp2.charAt(i); } n.backspace = true; r.text += kap; r.findText(kap,diff*-2); r.select(); return 0; } } n.backspace = false; return 0; } Estou chamando a função autocomplete assim: <input type="text" id="text_bairro" value="" backspace='false' onkeyup="autocomplete(this,<?php $cidades_nomes; ?>)" /><br /> Esse array, se impresso com print_r(), exibe assim: Array ( [0] => Eugenopolis [1] => Muriaé [2] => São Paulo ) Mas, o script só esta aceitando arra nesse formato: fruits = new Array('cleber','mamao','melancia','mercadoria','marmelada'); names = new Array('tom','dick','harry','john','petter','foo','bar');O que fazer nesse caso? Edited April 2, 2012 by Carlos Rocha Quote Link to comment Share on other sites More sharing options...
0 Carlos Rocha Posted April 2, 2012 Author Report Share Posted April 2, 2012 ninguém? Quote Link to comment Share on other sites More sharing options...
0 Carlos Rocha Posted April 3, 2012 Author Report Share Posted April 3, 2012 certo, então me diz apenas como posso imprimir a array $cidades_nomes com este aspecto;'Eugenopolis','Muriaé','São Paulo' Em vez de este: Array ( [0] => Eugenopolis [1] => Muriaé [2] => São Paulo ) ? A ideia aqui é fazer: <input type="text" id="text_bairro" value="" backspace='false' onkeyup="autocomplete(this,new Array(<?php echo $cidades_nomes; ?>))" /> Quote Link to comment Share on other sites More sharing options...
0 tiago31 Posted April 3, 2012 Report Share Posted April 3, 2012 amigo deixa intender.você quer fazer busca dentro do array.mais o array ele e javascript ou php? Quote Link to comment Share on other sites More sharing options...
0 Carlos Rocha Posted April 3, 2012 Author Report Share Posted April 3, 2012 Seguinte:Tenho o campo texto no formulario(form);<input type="text" id="text_bairro" value="" backspace='false' onkeyup="autocomplete(this,<?php $cidades_nomes; ?>)" />< Tenho o array php que, dando um print_r() nele, exibe: Array ( [0] => Eugenopolis [1] => Muriaé [2] => São Paulo ) [code] Eu quero que, a medida que o usuario for digitando o nome de cidade no campo texto do form, vá sendo feita uma busca no array php e autocompletando o nome da cidade caso haja alguma iniciando com o que o usuario digitar Só que isso só é possivel com JavaScript. Daí, estou usando a função abaixo para fazer esse serviço. Porem se observar as primeiras linhas comentadas, essa função requer que o array seja da forma new array e o php retorna array. Então, na hora de chamar a função tive a ideia de chamar criando o new array do Js e dentro dele, preciso arranjar uma forma de imprimir o array php da forma abaixo: [code] 'Eugenopolis','Muriaé','São Paulo' função autocomplete // JavaScript Document //fruits = new Array('cleber','mamao','melancia','mercadoria','marmelada'); //names = new Array('tom','dick','harry','john','petter','foo','bar'); function autocomplete(n,ac_array){ if (n.value == "") return 0; if (event.keyCode == 8 && n.backspace){ n.value = n.value.substr(0,n.value.length-1); n.backspace = false; } var r = n.createTextRange(); tmp= n.value; if (tmp == "")return 0; for (z=0;z<ac_array.length;z++){ tmp2 = ac_array[z]; count = 0; for (i = 0;i<tmp.length;i++){ if (tmp2.charAt(i) == tmp.charAt(i)){ count++ } } if (count == tmp.length){ diff = tmp2.length - tmp.length; if (diff <= 0) break; kap = ""; for (i=0;i<tmp2.length;i++){ if (i >= tmp.length) kap += tmp2.charAt(i); } n.backspace = true; r.text += kap; r.findText(kap,diff*-2); r.select(); return 0; } } n.backspace = false; return 0; } Consegue com o implode: onkeyup="autocomplete(this,new Array(<?php echo implode(',',$cidades_nomes); ?>))" mas acontece, as cidadesa estão sendo exibidas assim: new Array(Eugenopolis,Muriaé,São Paulo) E eu preciso assim: new Array('Eugenopolis','Muriaé','São Paulo') Quote Link to comment Share on other sites More sharing options...
0 Carlos Rocha Posted April 3, 2012 Author Report Share Posted April 3, 2012 Bom, consegui com o php assim:<?php $cidades_nomes_js=""; foreach ($cidades_nomes as $nome) { if ($nome == $cidades_nomes[count($cidades_nomes)-1]) { $cidades_nomes_js.="'".$nome."'"; } else { $cidades_nomes_js.="'".$nome."',"; } } ?> Acontece que a função autocomplete do JavaScript é case sensitive. Ou seja, se o usuario digitar mur, e no array tiver Muriaé, a busca não vai achar nada. Como eu faço para a busca não ser case sensitive? Segue novamente a função: <script> /*fruits = new Array('São Paulo','mamao','melancia','mercadoria','marmelada'); names = new Array('tom','dick','harry','john','petter','foo','bar'); */function autocomplete(n,ac_array){ if (n.value == "") return 0; if (event.keyCode == 8 && n.backspace){ n.value = n.value.substr(0,n.value.length-1); n.backspace = false; } var r = n.createTextRange(); tmp= n.value; if (tmp == "")return 0; for (z=0;z<ac_array.length;z++){ tmp2 = ac_array[z]; count = 0; for (i = 0;i<tmp.length;i++){ if (tmp2.charAt(i) == tmp.charAt(i)){ count++ } } if (count == tmp.length){ diff = tmp2.length - tmp.length; if (diff <= 0) break; kap = ""; for (i=0;i<tmp2.length;i++){ if (i >= tmp.length) kap += tmp2.charAt(i); } n.backspace = true; r.text += kap; r.findText(kap,diff*-2); r.select(); return 0; } } n.backspace = false; return 0; } </script> Quote Link to comment Share on other sites More sharing options...
Question
Carlos Rocha
Estou usando um script para completar um input type="text".
Estou chamando a função autocomplete assim: Esse array, se impresso com print_r(), exibe assim: Mas, o script só esta aceitando arra nesse formato:O que fazer nesse caso?
Edited by Carlos RochaLink to comment
Share on other sites
5 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.