Erro em função Javascript: input text is not defined

3 respostas
A

Bom dia pessoal…
Tenho um input text para login no meu portal e preciso validar somente números.
Ontem andei dando uma estudada em javascript pois não conheço nada e fiz duas funções para isso.
A primeira testa cada tecla digitada e só deixa passar número.
A segunda chamo no onblur do input e ela percorre o conteúdo do mesmo deixando apenas os números. Fiz um teste em uma página HTML e as duas funcionam.
Então fui passar as funções para meu portal em XHTML e dá o seguinte erro:

O que poderia ser? Estou referenciando errado meu input? Ou é alguma incompatibilidade com o XHTML?

Aproveitando gostaria de perguntar outra coisa: na primeira função, no Firefox ela não permite o CTRL+C / CTRL+V. Qual seria o código dessas duas combinações de teclas? No IE CTRL+C / CTRL+V funcionam e gostaria que no Firefox também.

Segue as duas funções em Javascript (estão no ) :

<script language="JavaScript">
//		<![CDATA[ 
			function SomenteNumeros(e){
				var tecla=(window.event)?event.keyCode:e.which;   
				if((tecla > 47) && (tecla < 58))
				{
					return true;
				}
				else{
					if ((tecla==8) || (tecla==0))
					{
						return true;
					}
					else{  
						return false;
					}
				}
			}

			function ValidaCopia(textoInput) {
				var texto = textoInput;
				var resultado = "";
				var indice = parseInt(0);
				
				//Qual outra maneira de pegar os caracteres no intervalo de '0' a '9'?
				for(indice ; indice < texto.length ; indice ++){
					if ( (texto.charAt(indice) == '0') || (texto.charAt(indice) == '1') ||
					     (texto.charAt(indice) == '2') || (texto.charAt(indice) == '3') ||
						 (texto.charAt(indice) == '4') || (texto.charAt(indice) == '5') ||
						 (texto.charAt(indice) == '6') || (texto.charAt(indice) == '7') ||
						 (texto.charAt(indice) == '8') || (texto.charAt(indice) == '9') ) 
					{
						resultado = resultado + texto.charAt(indice);					
					}
				}
				
                //Essas duas linhas comentadas abaixo foram outras formas que tentei para fazer jogar o resultado para o input text
				//document.forms["formulario"].elements["cnpjCpf"].value = resultado
				//document.getElementById("cnpjCpf").value = resultado;
				document.formulario.cnpjCpf.value = resultado;
			}

	//		function teste() {
	//		alert("teste");
	//		}
//			]]>
</script>

Segue o código do form e o input:

<body>	
	<div id="site">
	<f:view>
		<form id="formulario" jsfc="h:form" target="_parent">

			 <label for="un">CNPJ/CPF:</label>	 
			 
			 <input type="text" jsfc="h:inputText" id="cnpjCpf" name="cnpjCpf" value="#{credentials.username}" onkeypress="return SomenteNumeros(event);"
			 required="true" requiredMessage="Digite seu CNPJ/CPF!" onblur="ValidaCopia(cnpjCpf.value);" />
			
		</form>

	</f:view>
	</div>
</body>

3 Respostas

G
Ao invés de utilizar:
document.formulario.cnpjCpf.value
tente:
document.getElementById('formulario:cnpjCpf').value
Se estiver falando bobagem me corrijam, mas creio que eh sempre uma boa pratica utilizar:
document.getElementById()
do que
document.formulario
A

guilherme737

Obrigado pela ajuda mas, infelizmente continua dando o mesmo erro.
Coloquei assim:

document.getElementById('formulario:cnpjCpf').value = resultado

Antes colocava:

document.getElementById("cnpjCpf").value = resultado

Mas também dava erro.

Olhei o console de erros do IE essa vez e me disse que o erro está na linha do input. Imaginei que fosse dentro da função javascript.
Agora não sei o que pode ser :?
Quer dizer, já não sabia pois, em uma página HTML de testes, como eu disse, funciona. Nesse meu XHTML não.
rsrs

A

Consegui resolver

O problema estava ao chamar o Javascript. Ao invés de passar o nome_do_input.value usei this.value

<input type="text" jsfc="h:inputText" id="cnpjCpf" name="cnpjCpf" value="#{credentials.username}" onkeypress="return SomenteNumeros(event);" required="true" requiredMessage="Digite seu CNPJ/CPF!" onblur="ValidaCopia(this.value);" />

e no javascript usei a dica do guilherme737:

document.getElementById("formulario:cnpjCpf").value = resultado

Agora só falta conseguir liberar o CTRL+C e CTRL+V no Firefox :?

Criado 23 de março de 2011
Ultima resposta 23 de mar. de 2011
Respostas 3
Participantes 2