Código:
<script type="text/javascript">
function textbox(ident,x)
{
switch(x)
{
case "in":
{
if ( ident == "email"){document.getElementById(ident).value = ""; break;}
if ( ident == "pass") {document.getElementById(ident).value = ""; document.getElementById(ident).type = "password"; break;}
}
case "out":
{
if ( ident == "email" && document.getElementById(ident).value == ""){document.getElementById(ident).value = "aqui_tu@email"; break;}
if ( ident == "pass")
{
var y = document.getElementById(ident).value;
if ( y == ""){document.getElementById(ident).type = "text"; document.getElementById(ident).value = "aqui tu contraseña"; break;}
}
}
}
</script>
<form id="ide" action="index.php" method="post" enctype="application/x-www-form-urlencoded">
<label>Email:<input id="email" type="text" name="email" title="Email de usuario" value="tu@email" size="20" onfocus="textbox('email','in')" onblur="textbox('email','out')" /></label>
<label>Contraseña:<input id="pass" type="text" name="pass" value="aquí tu contraseña" size="10" onfocus="textbox('pass','in')" onblur="textbox('pass',out')" /></label>
<label><input type="checkbox" name="autologin" />Guardar</label>
<input type="submit" value="OK" />
</form>
Como se puede observar la función se llama desde el formulario mediante los eventos onfocus y onblur, si pudiera identificar desde que input se esta produciendo el evento no tendría que pasarle el parámetro "ident" a la función y si supiera que evento ha llamado a la función tampoco tendría que pasarle el parámetro "in" u "out".
Respecto a la duda de seleccionar un elemento mediante el getElementName es para prescindir del uso del atributo "id" en los "input". Pero no se como localizarlo, tal y como comentó Panino5001, para poder llamarlo por su índice.
A parte de esas dudas, encontré y modifique un poco el código de la barra de google de este foro para intentar comprenderlo:
Código:
<form id="ide" action="index.php" method="post" enctype="application/x-www-form-urlencoded">
<label>Email:<input id="email" type="text" name="email" title="Email de usuario" value="aqui_tu@email" size="20" /></label>
<label>Contraseña:<input id="pass" type="text" name="pass" value="aquí tu contraseña" size="10" /></label>
<label><input type="checkbox" name="autologin" />Guardar</label>
<input type="submit" value="OK" />
</form>
<script>
(
function()
{
var elemento = document.getElementById("email");
elemento.onfocus = function(){elemento.type = "password";};
elemento.onblur = function(){elemento.type = "text"; };
}
)
();
</script>
Y tengo varias dudas al respecto:
1. ¿Por qué este script no lleva declarado el atributo type="text/javascript"?
2. ¿Por qué si coloco el <script> antes del <form> no funciona?
3. ¿Por qué la función esta englobada en paréntesis y después hay un "();"? ¿es acaso la forma de autollamar a la función?
4. ¿Hay alguna forma de hacer el codigo siguiente sin utilizar funtion()?
Código:
elemento.onfocus = function(){elemento.type = "password";};
Es decir, algo tipo:
elemento.onfocus = (elemento.type = "password";)
o bien:
if ( elemento.onfocus )
{elemento.type = "password";}