Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho codigo abaixo que me atende mas agora quero modificar para relalizar outro tipo de busca
Ex: projeto,delphi,sistema,alunos,crachas ele acha beleza so o que acontece que agora eu tenho um combo box desta forma
>projeto, >>delphi, >>sistema,>>>alunos,>>>crachas
Gostaria que ele eliminase os sinais de > ou pesquisar as palavras ignorando o sinal de >
<script language="JavaScript">
/********************************************************************************
Busca nas Combos
********************************************************************************/
/**
* Função para efetuar uma pesquisa em listbox
*/
/ String de busca /
var searchStr = "";
/ variavel par o timeout limpar a string /
var searchTime = 0;
/**
* A função findit limpa qualquer timeout que foi previamente setado
* e procura por uma nova String
* então setara o timeout para ressetar ela mesma.
*/
function findIt(campo)
{
clearTimeout( searchTime );
searchStr += String.fromCharCode( event.keyCode );
for( var i = 0; i < campo.options.length; i++ )campo.selectedIndex = i;
break;
}
}
//Limpa a combo em tempo deteminado(milliseconds).
searchTime = setTimeout("clearSearchString()", 2000);
//cancel bubbling so that the default keypress doesnt come into play
event.returnValue = false;
}
/**
* Limpa a pesquisa para que não fique montando uma busca no campo.
*/
function clearSearchString()
{
searchStr = "";
}
</script>
<select name="sg_uf_valor" onkeypress="findIt(this);">
<option value="0"> -- </option>
<option value="1"> Projeto </option>
<option value="2"> >Delphi </option>
<option value="3"> >>Sistemas </option>
<option value="4"> >>>Alunos</option>
<option value="5"> >>>Crachas </option>
</select></td>Pq você nao usa o value em vez do texto ? Geralmente nao se usa o text por causa que pode ter acentuação etc por ser visual e o value para programação mesmo
Ja pensei nesta possibilidade, mas os valores vem do banco de dados mesmo.
Na verdade o problema de acentuação ta resolvido o problema e so ( > , >>)
hummm... bom já que neste caso não dá p/ usar o value.
tenta adaptar a pesquisa para pegar o texto a partir da última posição do sinal.
o objeto String no javascript tem um método chamado lastIndexOf que pode ser que ajude. neste site tem uma explicação um pouco mais detalhada: http://www.w3schools.com/jsref/jsref_lastIndexOf.asp.
talvez alterando este trecho do código que faz a pesquisa possa ajudar:
de:
>
if( campo.options*.text.toLowerCase().substr(** 0**,searchStr.length ) == searchStr.toLowerCase()*
)
para
>
*if( campo.options.text.toLowerCase().substr( campo.options.text.lastIndexOf(">") + 1****,searchStr.length ) == searchStr.toLowerCase()*
)
Ta dificil de encontrar a solução tenho que que resolver com esse aqui mesmo
Por exemplo tem busca Estados Unidos ou Costa Rica
<script language="JavaScript1.2">
var digitos=10 //quantidade de digitos buscados
var ponteiro=0
var buffer=new Array(digitos) //declaração do array Buffer
var cadeia=""
function buscar_op(obj,objfoco){
var letra = String.fromCharCode(event.keyCode)
if(ponteiro >= digitos){
cadeia="";
ponteiro=0;
}
//se se pressiona a tecla ENTER, apago o array de teclas pressionadas e salto a outro objeto...
if (event.keyCode == 13){
apagar_buffer();
if(objfoco!=0) objfoco.focus(); //evita foco a outro objeto se objfoco=0
}
//senao busco a cadeia teclada dentro do combo...
else{
buffer[ponteiro]=letra;
//salvo na posicao ponteiro a letra teclada
cadeia=cadeia+buffer[ponteiro]; //armo uma cadeia com os dados que vao ingressando ao array
ponteiro++;
//barro todas as opcoes que contem o combo e comparo a cadeia...
for (var opcombo=0;opcombo < obj.length;opcombo++){
if(obj[opcombo].text.substr(0,ponteiro).toLowerCase()==cadeia.toLowerCase()){
obj.selectedIndex=opcombo;
}
}
}
event.returnValue = false; //invalida a acao de clique de tecla para evitar busca do primeiro caractere
}
function apagar_buffer(){
//inicia a cadeia buscada
cadeia="";
ponteiro=0;
}
</script>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table width="544" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="89" height="29"></td>
<td width="114"></td>
<td width="26"></td>
<td width="315"></td>
</tr>
<tr>
<td height="19"></td>
<td valign="top">
<select name="combo1" onKeypress=buscar_op(this,text2) onblur=borrar_buffer() onclick=borrar_buffer()>
<option>Argentina</option>
<option>Australia</option>
<option>Bolivia</option>
<option>Brasil</option>
<option>Canada</option>
<option>Colombia</option>
<option>Dinamarca</option>
<option>» Estados Unidos</option>
<option>Estonia</option>
<option>Austria</option>
<option>Bulgaria</option>
<option>Chile</option>
<option>Espanha</option>
<option>China</option>
<option>» » Costa Rica</option>
<option>Croacia</option>
<option>» » Equador</option>
</select>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td height="18"></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="28"></td>
<td colspan="2" valign="top">
<input type="text" name="text2">
</td>
<td></td>
</tr>
<tr>
<td height="58"></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</body>
</html>é... não está funfando... dá vários erros de script, inclusive está chamando um método que não existe. :blink:
bom, reescrevi a função aproveitando uma boa parte, então não mudou tanto, eis o código na íntegra. repare que a chamada da função que estão nos select's foram modificadas em relação ao original, ok?
<script language="JavaScript1.2">
var cadeia = "";
var idLimpeza;
function buscar_op(obj,objfoco,e,exc) {
var evtobj = window.event? event : e; //retorna o evento de acordo com o navegador
var unicode = evtobj.charCode? evtobj.charCode : evtobj.keyCode; //retorna o código da tela de acordo com o navegador
var letra = String.fromCharCode(unicode); //retorna o caracter representado no código
if (idLimpeza) window.clearTimeout(idLimpeza); //se foi definido o timeout para chamar a rotina de limpar o buffer, cancelar tal chamada.
//se se pressiona a tecla ENTER, apago o array de teclas pressionadas e salto a outro objeto...
if (unicode == 13){
apagar_buffer();
if(objfoco!=0) objfoco.focus(); //evita foco a outro objeto se objfoco=0
}
else {
cadeia += letra; //acrescente a tecla à cadeia
document.getElementById('text4').value = cadeia; //simplesmente teste para acompanhar o conteúdo da cadeia, PODE REMOVER.
var sairFor = false;
for (var opcombo=0;opcombo < obj.length;opcombo++){
var posiIni = obj[opcombo].text.lastIndexOf(exc); //verifica se existe o caracter que deve ser desconsiderado
if (posiIni >= 0) posiIni += exc.length; //se encontrar o texto a ser 'desconsiderado'
//se o texto que representa a busca for igual ao conteúdo localizado no select, define o índice atual
if(obj[opcombo].text.substr(posiIni, cadeia.length).toLowerCase() == cadeia.toLowerCase()) {
obj.selectedIndex = opcombo;
sairFor = true; //
}
if (sairFor) break; //sair do loop assim que encontrar o primeiro registro que satifaz a busca
}
}
evtobj.returnValue = false;
}
function apagar_buffer(){
//inicia a cadeia buscada
cadeia="";
}
function defineLimpeza() {
//limpar o buffer após 1 segundo da última tecla pressionada
idLimpeza = window.setTimeout('apagar_buffer()',1000);
}
</script>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<table width="544" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="89" height="29"></td>
<td width="114"></td>
<td width="26"></td>
<td width="315"></td>
</tr>
<tr>
<td height="19"></td>
<td valign="top">
<select name="combo1" onKeypress="buscar_op(this,'text2',event,'» ');defineLimpeza()">
<option>Argentina</option>
<option>Australia</option>
<option>Bolivia</option>
<option>Brasil</option>
<option>Canada</option>
<option>Colombia</option>
<option>Dinamarca</option>
<option>» Estados Unidos</option>
<option>Estonia</option>
<option>Austria</option>
<option>Bulgaria</option>
<option>Chile</option>
<option>Espanha</option>
<option>China</option>
<option>» » Costa Rica</option>
<option>Croacia</option>
<option>» » Equador</option>
</select>
<select name="combo1" onKeypress="buscar_op(this,'text2',event, '>');defineLimpeza()">
<option value="0"> -- </option>
<option value="1"> Projeto </option>
<option value="2"> >Delphi </option>
<option value="3"> >>Sistemas </option>
<option value="4"> >>>Alunos</option>
<option value="5"> >>>Crachas </option>
</select>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td height="18"></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td height="28"></td>
<td colspan="2" valign="top">
<input type="text" name="text2">
<input type="text" name="text3" id="text3">
<input type="text" name="text4" id="text4">
</td>
<td></td>
</tr>
<tr>
<td height="58"></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</body>
</html>
o código está bem comentado, qquer dúvida posta ae.ah.
um trecho do código também aproveitei daqui: http://www.javascriptkit.com/javatutors/javascriptkey2.shtml
Nossa o caminho e sse mesmos.. valeu pela força agora vou ajustar pra funcionar certinho aqui no meu script valeu...
Existe uma solução que atenderia mas ela não funciona
http://www.criarweb.com/artigos/693.php