Ir para conteúdo
Fórum Script Brasil
  • 0

Autocompletar


Carlos Rocha

Pergunta

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 por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0
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 por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

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 por fiote
Link para o comentário
Compartilhar em outros sites

  • 0
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 por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...