Carlos Rocha Postado Julho 23, 2014 Denunciar Share Postado Julho 23, 2014 (editado) Pessoal, boa tarde, Tenho o script php abaixo: <?php $nomes_php= array(); $nomes_js=""; $nomes_string ="SELECT nomealuno FROM alunos ORDER BY nomealuno"; $nomes_query = $conexao->query($nomes_string); if ($nomes_query->num_rows>0) { while(list($nomes)=$nomes_query->fetch_row()) { array_push($nomes_php, "'".$nomes."'"); } $nomes_js= implode( ",", $nomes_php ); } ?> Que me devolve o seguinte array; new Array('Ailton José','José dos Reis') E o seguinte código javascript para autocompletar o type=text. //fruits = new Array('cleber','mamao','melancia','mercadoria','marmelada'); //names = new Array('tom','dick','harry','john','petter','foo','bar'); function autocompletar(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; } E o campo do form <input type="text" id="nomealuno" name="nomealuno" size="80" maxlength="200" onkeyup="autocomplete(this,new Array(<?php echo $nomes_js; ?>))"/> Esta dando o seguinte erro: Uncaught TypeError: string is not a function Como corrijo isso? Editado Julho 23, 2014 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Julho 23, 2014 Denunciar Share Postado Julho 23, 2014 O que echo $nomes_js; retorna aí? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Julho 23, 2014 Autor Denunciar Share Postado Julho 23, 2014 isso: 'Ailton José','José dos Reis' Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Julho 23, 2014 Denunciar Share Postado Julho 23, 2014 function autocompletar(n,ac_array) { if (n.value == "") return 0; if (event.keyCode == 8 && n.backspace) event não está definido. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Julho 23, 2014 Autor Denunciar Share Postado Julho 23, 2014 (editado) Como corrigir? fiz assim mas não deu: onkeyup="autocomplete(this,new Array(<?php echo $nomes_js; ?>), event)"/> ..... function autocompletar(n,ac_array, e){ if (n.value == "") return 0; if (e.keyCode == 8 && n.backspace){ n.value = n.value.substr(0,n.value.length-1); n.backspace = false; } ...... Quando exibo o código fonte sai assim: <label>Nome do Aluno: </label><input type="text" id="nomealuno" name="nomealuno" size="80" maxlength="200" onkeyup="autocomplete(this,new Array('Ailton José','José dos Reis'), Event)"/><br /> Editado Julho 23, 2014 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Julho 23, 2014 Denunciar Share Postado Julho 23, 2014 (editado) Não coloque as funções no html. Isso é uma prática ruim. Tira o onkeyup do input e tenta assim: // coloque seu <echo> aqui. ac_array = new Array('Ailton José', 'José dos Reis'); window.onload = function() { document.getElementById('nomealuno').onkeyup = function(event) { var n = this; 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; }; }; E outra coisa importante: Não sei quem te ensinou a usar esse createTextRange, mas ele só funciona no internet explorer. Editado Julho 23, 2014 por fiote Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Julho 23, 2014 Autor Denunciar Share Postado Julho 23, 2014 (editado) Não entendi muito bem '// coloque seu <echo> aqui.' Esse código faz parte de um arquivo javascript e não tem como colocar um string php aqui. O que acontece é que para eu popular o ac_array = new Array('Ailton José', 'José dos Reis'); Vou depender de uma string que vem do php com os nomes 'Ailton José', 'José dos Reis' Entõ fiquei perdido aqui Fiz assim e deu erro de tipos <?php $nomes_php= array(); $nomes_js=""; $nomes_string ="SELECT nomealuno FROM alunos ORDER BY nomealuno"; $nomes_query = $conexao->query($nomes_string); if ($nomes_query->num_rows>0) { while(list($nomes)=$nomes_query->fetch_row()) { array_push($nomes_php, "'".$nomes."'"); } $nomes_js= implode( ",", $nomes_php ); } ?> <script>ac_array = new Array(<?php echo $nomes_js; ?>);</script> E o código que você enviou com exceção da segunda linha que usei no php Eis o erro Uncaught TypeError: undefined is not a function Editado Julho 23, 2014 por Carlos Rocha Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Julho 23, 2014 Denunciar Share Postado Julho 23, 2014 Que erro que deu? Era exatamente isso que eu queria que você fizesse mesmo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Julho 23, 2014 Autor Denunciar Share Postado Julho 23, 2014 Eis o erro Uncaught TypeError: undefined is not a function Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Julho 23, 2014 Denunciar Share Postado Julho 23, 2014 Esse erro é de javascript. Você viu o que eu postei no finalzinho? E outra coisa importante: Não sei quem te ensinou a usar esse createTextRange, mas ele só funciona no internet explorer. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Julho 23, 2014 Autor Denunciar Share Postado Julho 23, 2014 sim, mas testei no ie e deu erro trambem! Se você tiver uma alternativa para autocompletar seria ótimo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fiote Postado Julho 24, 2014 Denunciar Share Postado Julho 24, 2014 Bem, você pode usar uma solução pronta. ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Carlos Rocha Postado Julho 24, 2014 Autor Denunciar Share Postado Julho 24, 2014 Valeu, usei essa mesma. Deu certo, Obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Carlos Rocha
Link para o comentário
Compartilhar em outros sites
12 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.