Ir para conteúdo

POWERED BY:

Arquivado

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

Hatsuya

Var Global

Recommended Posts

Oi galerinha, estou com um problema meio estranho... A minha variável global não é reconhecida.

 

Segue abaixo:

 

<html>
	<head>
		<title> Formulário com Js </title>
		<script type="text/javascript">
			campo = document.t.campo1.value;
			function digite() {
				if (campo == '') { 
					campo = 'Digite algo';
			}
			}
			
			function b() {
			if (campo == 'Digite algo') {
			campo = '';}
			
			}

		</script>
	</head>
	
	<body>
	<form name="t">
<p>Nome:<input type="text" name="campo1" onBlur="digite()" onFocus="b()"></p>
	</form>
	</body>

</html>

 

Somente que a variável 'campo' que foi definida fora de todas as funções, não é reconhecida como global :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

<input type="text" name="campo1" onBlur="digite()" onFocus="b()">
:seta:

<input type="text" name="campo1" onFocus="autoReset(this.form,true); onBlur="autoReset(this.form,false);">




  • campo = document.t.campo1.value;
  • function digite() {
  • if (campo == '') {
  • campo = 'Digite algo';
  • }
  • }
  • function b() {
  • if (campo == 'Digite algo') {
  • campo = '';}
  • }

:seta:

str_default = 'Digite algo';
field = 'campo1';
function autoReset(obj,focus){
    str = obj[field].value;
    if(focus){
         ( obj[field].value == '' )? obj[field].value = str_default: '';
    }else{
         ( obj[field].value == str_default )? obj[field].value = '': '';
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

vc ta executando o script antes do campo ser criado.

 

então a sua variavel ta sem nenhum valor.

para criar essa global corretamente, vc tem q esperar o elemento existir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Hinom Então, eu estou estudando javascript por agora... do jeito que eu fiz não é possível? ~.~ porque não entender o mais básico, não irei entender nem o que você fez aí .-.

 

Mas, agradeço pela resposta.

 

 

@William caro Bruno ;), isso acontece por que o javascript assim que chamado, ele se executa primeiro que tudo. mais ou menos assim neh? existe alguma função predefinida para fazer ele esperar? tentei document.getElementByID, para pegar o id do elemento do formulario, mas não tive muitos resultados

 

E bruno, mesmo se eu criar uma variável com 'document.t.campo1.value', dentro de cada função funciona!, maas, fica muito cansativo escrever , sendo que poderia substituir por uma variável

 

<html>
	<head>
		<title> Formulário com Js </title>
		<script type="text/javascript">
			function digite() {
				var campo1 = document.t.campo1.value;
				if (campo1 == '') { 
					document.t.campo1.value = 'Digite algo';
			}
			}
			
			function b() {
			var campo1 = document.t.campo1.value;
			if (campo1 == 'Digite algo') {
			document.t.campo1.value = '';}
			
			}

		</script>
	</head>
	
	<body>
	<form name="t">
	<p>Nome:<input type="text" name="campo1"  onBlur="digite()" onFocus="b()"></p>
	</form>
	</body>

</html>

 

Desse jeito funciona

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, existe:

var campo = '';
window.onload = function(){
    campo = document.t.campo1.value;
}

 

é oque vc disse mesmo, o javascript vai ser executado exatamente onde vc colocou ele.

Vc colocou antes do html, então ele é executado antes.

 

Se vc tivesse colocado depois, o elemento existiria, ai daria certo sem alterar nada no seu script, apenas o local dele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@William pelo que eu entendi, definiria a var campo, ai window.onload() faria esperar a página carregar pra executar a funçaão de definição da variável: campo = document.t.campo1.value;

 

e ja que a página estaria carregada existiria o objeto.

 

<html>
	<head>
		<title> Formulário com Js </title>
		
		<script type="text/javascript">
			var campo = '';
			window.onload() = function(){
			campo = document.t.campo1.value;
			}
			
			
			function digite() {
				if (campo == '') { 
				campo = 'Digite algo';
			}
			}
			
			function b() {
			if (campo == 'Digite algo') {
			campo = '';
                        }
			}

		</script>
	</head>
	
	<body>
	<form name="t">
	<p>Nome:<input type="text" name="campo1" value=''  onBlur="digite()" onFocus="b()"></p>
	</form>
	</body>

</html>

 

 

Hahaha, mas, ainda não funcionou :S, cara... javascript é todo novo pra mim, da raiva as vezes U.U, estou a tentar aqui...

 

Edit: Abri no firefox, disse que window.onload não era uma função '-'

Edit2: Corriji tudo, mas mesmo assim não funfa :X

 

Edit3: o problema está sendo, no

function digite() {
if (campo == '') { 
campo = 'Digite algo';
}
}

 

 

parece que se mudar o segundo 'campo' para o valor real: document.t.campo1.value ele vai...

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema no código, é q vc não tem ninguém apontando para o objeto

<html>
	<head>
		<title> Formulário com Js </title>
		
		<script type="text/javascript">			
			
			function digite(campo) {
				if (campo.value == '') { 
				campo.value = 'Digite algo';
			}
			}
			
			function b(campo) {
			if (campo.value == 'Digite algo') {
			campo.value = '';
                        }
			}

		</script>
	</head>
	
	<body>
	<form name="t">
	<p>Nome:<input type="text" name="campo1" value=''  onBlur="digite(this)" onFocus="b(this)"></p>
	</form>
	</body>

</html>

a variavel campo global, aponta para o VALUE. Vc precisa de alguém q aponte para o objeto input. Note que usei o this.

 

Vou melhorar o teu codigo e posto aqui depois q vc entender oq eu disse agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que entendi mais ou menos...

 

Só que mesmo sendo:

 

campo = document.t.campo1.VALUE;

 

é necessário o 'value' depois do 'campo'?

 

campo.value

 

E agradeço mais uma vez :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim.. pq .value é uma propriedade.

 

ai uma vez q vc fez o GET dela, ela vira estática entendeu ?

e vc precisa recuperar ela a cada chamada da função, por isso precisa do objeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@William Agora eu compreendi, aprendi umas coisas maneirinhas, o que não entendi totalmente foi o 'This', mas eu ainda não pesquisei e nem estudei sobre :D apesar de ser o de menos, mas obrigado mais uma vez pelas dicas ;) vamo que vamo!

 

Vou ficar modificando e vendo os resultados pra assimilar direito aqui!

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.