Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Emerson Placido

Busca em Combo Box

Recommended Posts

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++ )
{
if( campo.options[i].text.toLowerCase().substr( 0,searchStr.length ) == searchStr.toLowerCase()
 )			   
{
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>

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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()

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

é... 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.