¿que hace diferente cada bloque?
el nombre del campo a chequear.
¿como utilizar esa diferencia para simplificar el script?
coger solo un bloque y cambiar el nombre de campo por una variable generica.
¿y ahora que?
colocar en una matriz los nombres de campo a chequear.
¿y?
hacer un bucle con esa matriz como argumento.
¿como hacer para que solo haya un mensaje de alerta?
en una variable colocamos los campos erroneos al chequearlos. Al terminar el bucle lanzamos el alert con esos nombres.
¿como pasamos el foco al campo vacio?
en otra variable recogemos el primer campo vacio. Al terminar el bucle le damos el foco.
Código:
function generar()
{
var n, foc, msj="", campos=["nombre","apellidos","pais"]
for(n in campos)
{
if(document.getElementById(campos[n]).value=="")
{
foc=msj?foc:campos[n]
msj+=campos[n]+" "
}
}
if(msj)
{
alert("los campos con arterisco son requeridos, debe rellenar:\n\n"+msj)
document.getElementById(foc).focus()
return false
}
}