Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Dimitar Stefanov

Páginas: 1 ... 9 10 11 12 13 [14] 15 16 17 18 19 ... 30
261
Buenas tardes. Dejo una posible solución de los ejercicios de la entrega CU01189E del curso JavaScript desde cero.

Citar
EJERCICIO 1

Dado este fragmento de código. Revísalo y responde a las siguientes preguntas:

Código: [Seleccionar]
var persona1 = {};

Object.defineProperty(persona1, "edad", { value: 42, writable: false });

persona1.edad = 19;

Citar
a) Explica paso a paso el significado de este código (busca información en internet si te es preciso).

var persona1 = {}; Creamos un objeto de tipo "persona1"

Object.defineProperty(persona1, "edad", { value: 42, writable: false }); Mediante el método "Object.defineProporty()" definimos las propiedades del objeto "persona1". En este caso definimos la propiedad "edad", le damos un valor de "42" y establecemos que no será reescribible a través de la propiedad "writable: false". Si fuera "writable: true" podríamos cambiar el valor de la propiedad "edad" posteriormente.

persona1.edad = 19; Intentamos cambiar el valor de la propiedad "edad" a "19". Digo "intentamos" porque anteriormente vimos que está propiedad la establecimos como no variable (de algún modo podriamos decir que actuará como una constante).

Citar
b) Crea un pequeño script donde se ejecute este código y se muestre un mensaje por pantalla informando del valor de la edad. Activa la consola para comprobar si aparece algún error.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

persona1 = {};
Object.defineProperty(persona1,'edad',{value:42, writable: false});
persona1.edad = 19;
alert(persona1.edad);

</script>
</head>
<body>

</body>
</html>

No aparece ningún tipo de error.

Citar
c) Crea el mismo script pero usando strict mode. Activa la consola y comprueba si aparece algún error. ¿Qué diferencias observas entre la ejecución con strict mode y sin strict mode? ¿Qué explicación le darías a estas diferencias? ¿Crees que sería positivo que este código se escribiera en strict mode o no? ¿Por qué?

Cuando el código se ejecuta bajo la instrucción "use strict" nos aparece el error: "ReferenceError: assignment to undeclared variable persona1". En cambio, en modo normal (no estricto) no aparece dicho error y el código acaba ejecutándose del todo. En modo estricto se detiene al detectar el error.
Personalmente creo que los códigos se tendrían que escribir con una síntaxis "correcta". Para la funcionalidad de este código no sería positivo ejecutarlo en modo estricto, más que nada, porque se detendría al detectar el error. De forma general, creo que sería positivo haberse escrito en modo strict porque así el programador observará el error y hubiera declarado la variable "persona1" porque si hubiera continuado el código y se hubiera incluido otra ambiente con una variable que tenga el mismo nombre habría conflicto de interpretación a la hora de ejecutar el código.

Citar
EJERCICIO 2

Crea y ejecuta un script que use with y que esté:

a) En modo normal. ¿Cuál es el código y cuál es el resultado que obtienes?

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

function ejemplo(){
with(document.getElementById('cabecera').style){
color = "black";
width = "200px";
padding = "20px";
fontSize = "32px";
}
}

</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div id="pulsador" style="color: blue;" onclick="ejemplo()">Probar</div>
</body>
</html>

Cuando hacemos click sobre "probar" se ejecuta el código con la función "ejemplo()". El div con id="cabecera"  adopta la propiedades especificadas en el código. Es decir, un color negro (de contenido, no de fondo), un ancho de 200px, un relleno de 20px y un tamaño de fuente de 32px.

Citar
b) En strict mode. ¿Cuál es el código y cuál es el resultado que obtienes?

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

function ejemplo(){
'use strict';
with(document.getElementById('cabecera').style){
color = "black";
width = "200px";
padding = "20px";
fontSize = "32px";
}
}

</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div id="pulsador" style="color: blue;" onclick="ejemplo()">Probar</div>
</body>
</html>

Citar
with ha pasado a considerarse no permitido en strict mode (donde obtendremos un error de tipo <<SyntaxError: strict mode code may not contain 'with' statements>>) y se considera que terminará por desaparecer (o ser replanteado de otra manera).

Gracias.

262
Hola, pedro,,

Gracias por tu tiempo, por el tiempo dedicado y por las corrección.

Daba por hecho que con el código ya se entendía. Repito los apartados a) y b) con sus explicaciones.

Citar
a) ¿Cómo se realiza la comprobación de que no hay campos vacíos?

Código: [Seleccionar]
if ((formulario.campo1.value.length == 0) || (formulario.campo2.value.length ==0) || (formulario.cpostal.value.length ==0) || (formulario.dni.value.length ==0) || (formulario.email.value.length ==0)){
            alert('Falta información');
            return false;
        }

Esta parte del código está comprobando si los values de los campos: campo1, campo2, cpostal, dni y email contienen más de 0 carácteres. En caso afirmativo no devuelve false (no se activa la acción por omisión) y aparece una alerta con el mensaje: "Falta información".

Citar
b) ¿Cómo se realiza la comprobación de que el campo 2 es un número?

Código: [Seleccionar]
if (isNaN(parseInt(formulario.campo2.value))) {
            alert('El campo2 debe ser un número');
            return false;
        }

En esta parte del código mediante el método "isNaN()" comprueba si la propiedad del campo "campo2" es un número o no. El método "parseInt()" extrae de la cadena de texto sólo los números enteros.

Gracias, Pedro :)

263
Buenas, pedro,,

Gracias por corregirme el ejercicio y por tu tiempo.

Pero no era eso lo que pedía el ejericicio? El script está en línea.

No es eso lo que pedía el ejercicio?

Citar
d) Modifica el código para que la apariencia y resultados sean iguales pero sin usar un elemento <a> … </a>

Dejé el mismo script como el que había en el ejercicio, sólo cambié la etiqueta <a> por <span> y se visualiza como si fuera en enlace.




264
Hola a toda la comunidad de aprenderaprogramar.com

Aquí os expongo una posible solución del ejercicio CU01188E del curso JavaScript

Citar
EJERCICIO

Un programador ha desarrollado este código. Revísalo y responde a las siguientes preguntas:

Código: [Seleccionar]
function createCookie(name,value,days) {

                if (days) {

                               var date = new Date();

                               date.setTime(date.getTime()+(days*24*60*60*1000));

                               var expires = "; expires="+date.toGMTString();

                }

                else var expires = "";

                document.cookie = name+"="+value+expires+"; path=/";

}

 
function eraseCookie(name) { createCookie(name,"",-1); }

Citar
a) ¿Para qué sirve la función createCookie? Explica paso a paso qué es lo que hace esta función.

Principalmente es para crear una cookie y borrarla al cerrarse el navegador.
Primero lo que hacemos es comprobar si el parámetro "days" existe. En caso afirmativo ejecutamos el código que le corresponde. Es decir, creamos un objeto de tipo Date con el valor del momento en el que se crea dicho objeto. Posteriormente modificamos dicho objeto mediante la propiedad ".setTime()" a un día anterior (86.400.000 son los milisegundos que tiene un día).  Y finalmente establecemos el parámetro "expires" del objeto cookie a la fecha anterior al día actual (con lo cual se borrará).
Si no existe el parámetro "days" inicializamos la variable "expires" a una cadena vacía (lo que hará como parámetro del objeto Cookie que se borre la cookie al cerrar el navegador ).
Tanto si existe el parámetro "days", como si no, creamos una cookie con la siguiente instrucción:

Código: [Seleccionar]
document.cookie = name+"="+value+expires+"; path=/"; 

Código: [Seleccionar]
b) ¿Para qué sirve la función eraseCookie? Explica paso a paso qué es lo que hace esta función.
La función "eraseCookie(name)" pasa el parámetro "name" e invoca la función "createCookie()" con un valor negativo al parámetro "days" cual hará borrar la cookie.

Citar
c) Escribe el código de una función de nombre mostrarTodasLasCookies() que muestre el nombre y valor de todas las cookies existentes. Por ejemplo, si hay dos cookies deberá mostrarse algo como esto:

Hay 2 cookies en el documento

Cookie 1 con nombre: cookieNombreUsuario y valor: Alberto

Cookie 2 con nombre cookieEdadUsuario y valor 8

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

function mostrarTodasLasCookies() {
document.cookie = "cookieNombreUsuario = Alberto; expires = Thu, 12 Aug 2049 20:47:11 UTC; path = /;";
document.cookie = "cookieEdadUsuario = 8; expires = Thu, 12 Aug 2049 20:47:11 UTC; path = /;";
var numeroCookies = document.cookie.split(';');
var msg = 'Hay '+numeroCookies.length+' cookies en el documento.\n\n';
for(var i=0; i<numeroCookies.length; i++){
var cookieNombre = numeroCookies[i].substring(0, numeroCookies[i].indexOf('='));
msg = msg + 'Cookie '+(i+1)+' con nombre: '+cookieNombre;
var cookieValor = numeroCookies[i].substring((numeroCookies[i].indexOf('=')+1), numeroCookies[i].length);
msg = msg + ' y valor: '+cookieValor+'\n\n';
}
alert(msg);
}

</script>
</head>
<body>
<div id="numeroCookiescabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplo JavaScript</h3>
</div>
<div id="pulsador" style="color: blue;"><a href="#" onclick="mostrarTodasLasCookies()">Mostrar todas las cookies</a></div>
</body>
</html>

Citar
d) Usando las funciones createCookie, eraseCookie y  mostrarTodasLasCookies() crea un script que pida 3 nombres y valores de cookies al usuario, y cree las cookies correspondientes. A continuación deberá mostrar las cookies existentes y sus valores. Finalmente, deberá borrar la última cookie existente y volver a mostrar todas las cookies y sus valores.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

function datosCookies(){
var cookie = [];
var valor = [];
for(var i=0; i<3; i++){
cookie[i] = prompt('Entra nombre cookie:');
valor[i] = prompt('Entrar valor cookie:');
createCookie(cookie[i],valor[i],1);
}
mostrarTodasLasCookies();
eraseCookie(cookie[2])
mostrarTodasLasCookies();
}

function mostrarTodasLasCookies() {
var numeroCookies = document.cookie.split(';');
var msg = 'Hay '+numeroCookies.length+' cookies en el documento.\n\n';
for(var i=0; i<numeroCookies.length; i++){
var cookieNombre = numeroCookies[i].substring(0, numeroCookies[i].indexOf('='));
msg = msg + 'Cookie '+(i+1)+' con nombre: '+cookieNombre;
var cookieValor = numeroCookies[i].substring((numeroCookies[i].indexOf('=')+1), numeroCookies[i].length);
msg = msg + ' y valor: '+cookieValor+'\n\n';

}
alert(msg);
}

function createCookie(name,value,days) {
        if (days){
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = '';
            expires=''+date.toGMTString();
        }else
        var expires = "";

        document.cookie = name+'='+value+expires+"; path=/";
}

function eraseCookie(name){createCookie(name,'',-1);}

</script>
</head>
<body>
<div id="numeroCookiescabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplo JavaScript</h3>
</div>
<div id="pulsador" style="color: blue;"><a href="#" onclick="datosCookies()">Mostrar todas las cookies</a></div>
</body>
</html>

Graicas.

265
Si decidimos comprobar la variable capturada "e", en el caso de que sea un objeto de tipo Error, tenemos que hacerlo de la siguiente manera:

Código: [Seleccionar]
function validarPassword(password){
    try {
    if(password.length < 5 ){     
    throw new Error('SHORT');   
    }else if(password.length > 10 ){ 
    throw "LONG";   
    }
    alert("Password Validated!");
  }
  catch(e){
    if(e.message == "SHORT"){ 
    alert("No hay suficientes caracteres de la contraseña !");
    }else if(e == "LONG"){
alert("Contraseña contiene demasiados caracteres !");   
}
}
finally{document.miFormulario.password.value='';}
  alert("La revisión ha terminado.");
}

Si dejaramos el código así:

Código: [Seleccionar]
function validarPassword(password){
    try {
    if(password.length < 5 ){     
    throw new Error('SHORT');   
    }else if(password.length > 10 ){ 
    throw "LONG";   
    }
    alert("Password Validated!");
  }
  catch(e){
    if(e == "SHORT"){ 
    alert("No hay suficientes caracteres de la contraseña !");
    }else if(e == "LONG"){
alert("Contraseña contiene demasiados caracteres !");   
}
}
finally{document.miFormulario.password.value='';}
  alert("La revisión ha terminado.");
}

No funcionaría, porque la variable "e" ya no es un cadena de texto, sino un objeto y para que se compare un valor de una propiedad de objeto siempre te tiene que invocar dicha propiedad (concatenando con el objeto).

266
Buenas tardes. Hago entrega de una posible solución del ejercicio CU01187E del curso JavaScript desde cero.

Citar
EJERCICIO

Un programador ha desarrollado un código y nos han pedido que lo revisemos. Escribe este código en un editor, ejecútalo y responde a las siguientes preguntas:

Código: [Seleccionar]
<html> <head><meta charset="utf-8"><style type="text/css"> input {margin:10px;} </style>

<script>

function validarPassword(password){

  try  {

    if(password.length < 5 ) {      throw "SHORT";    }else if(password.length > 10 ) {  throw "LONG";    }

    alert("Password Validated!");

  } catch(e) {

    if(e == "SHORT"){  alert("Not enough characters in password!"); }

    else if(e == "LONG"){ alert("Password contains too many characters!");   }

  }finally{    document.miFormulario.password.value="";   }

  alert("La revisión ha terminado.");

}

 </script>

    </head>

    <body>

        <form name="miFormulario" onsubmit="validarPassword(document.getElementById('pass').value)" action="#" >

            Nombre de usuario: <input type="text" name="campo1"><br>

            Password: <input id="pass" type="password" name="password"><br>

            <input type="submit" value="Comprobar" name="comprobar">

        </form>

    </body>
</html>

Citar
a) Busca información en internet y respode: ¿Qué significado tiene una instrucción como throw "SHORT";? ¿A qué da lugar? ¿Qué diferencia hay entre throw "SHORT" y throw new Error('SHORT')?

Mediante la instrucción: "throw "SHORT"" estamos lanzando una cadena de texto "SHORT". Con la instrucción: "throw new Error("SHORT")" creamos un Object Error con un parámetro personalizado "SHORT".

Citar
En los errores que lanzamos nosotros con new Error las propiedades del objeto pueden ser establecidas por nosotros, ...

Citar
b) ¿Cuál es el objetivo que parecía pretender cumplir el autor del código?

Comprobar si la contraseña tenía entre 5 y 10 dígitos. En caso contrario se lanzará un error con sus respectivos mensajes de alerta.

Citar
c) ¿En qué casos se ejecuta la cláusula finally incluida en el código?

Citar
Las sentencias incluidas dentro de una cláusula finally se ejecutarán independientemente de que se haya producido un error o no durante la ejecución del bloque try.

Es decir, se ejecutará siempre la cláusula finally.

Gracias

267
Hola, pedro,,

Gracias por el código alternativo. Sin duda es mejor porque ha cumplido con la economía de recursos y es mejor legible (vamos, que se entiende mucho más rápido). Ves, por ejemplo, a mi no se me había ocurrido utilizar una función auxiliar para establecer la propiedad disabled de los paises, como a ti. Supongo que es falta de práctica.

He copiado el código facilitado por ti en un editor y lo he probado y funciona a la perfección(en todos los navegadores que lo he probado). Gracias.

Saludos :)

268
Buenas noches.

Mediante la presente hago la entrega de una posible solución del ejercicio CU01186E del curso JavaScript.

Citar
EJERCICIO

Un programador ha desarrollado un código y nos han pedido que lo revisemos. Escribe este código en un editor y responde a las siguientes preguntas (nota: cambia la ruta de las imágenes si quieres):

Código: [Seleccionar]
<html><head><script type="text/javascript">

image01= new Image()

image01.src="http://i877.photobucket.com/albums/ab336/cesarkrall/Divulgacion/logonotplusplus.png"

image02= new Image()

image02.src="http://i877.photobucket.com/albums/ab336/cesarkrall/Divulgacion/DV00405A_1.jpg"

function rollover(imagename, newsrc){

document.images[imagename].src=newsrc.src

}

</script></head>

<body style="text-align:center; margin:50px;">

<p> Pasa el mouse sobre la imagen </p>

<a  href="#" onmouseover="rollover('example', image02)"

onmouseout="rollover('example', image01)">

<img src="http://i877.photobucket.com/albums/ab336/cesarkrall/Divulgacion/logonotplusplus.png" name="example">

</a>

</body></html>

Citar
a) ¿En qué ámbito se encuentran image01 e image02?

En un ámbito global

Citar
b) ¿Qué tipo de objetos son image01 e image02?

Object Image.

Citar
c) ¿Aparecerán errores debido a la falta de puntos y coma de terminación en las instrucciones de JavaScript? ¿Por qué?

No aparecer errores porque el intérprete del navegador, aunque no está perfectamente escrito el código, siempre intenta ejecutar el código en la medida que se pueda.

Citar
d) Al acceder a una imagen con la sintaxis document.images[imagename], ¿se está usando un índice numérico para acceder a la colección? Si es numérico, indicar qué valores son los que se usan. Si no es numérico, indicar qué tipo de índice es.

No se está usando un índice numérico. Es un índice mediante el nombre del elemento.

Citar
e) El efecto esperado es que la imagen que se muestra cambie cuando pasamos el puntero del ratón por encima de ella. ¿Por qué se produce ese cambio? Explícalo brevemente.

Se produce el cambio de la imagen gracias a esta parte del código HTML:

Código: [Seleccionar]
onmouseover="rollover('example', image02)" onmouseout="rollover('example', image01)"
Y la función:

Código: [Seleccionar]
function rollover(imagename, newsrc){
document.images['example'].src = newsrc.src;
}

Cuando pasamos por encima con el ratón se toma como propiedad(src) de la imagen el valor de la variable "image02" que es: "http://i877.photobucket.com/albums/ab336/cesarkrall/Divulgacion/DV00405A_1.jpg". Cuando apartamos el ratón del area del elemento "<img>" la propiedad(src) de la imagen toma el valor de la variable "image01" que es: "http://i877.photobucket.com/albums/ab336/cesarkrall/Divulgacion/logonotplusplus.png". Por eso ocurre el cambio de la imagen al mover el ratón encima.

Gracias.

269
Buenas noches. Aquí va el ejecicio CU01185E del curso JavaScript desde cero.

Citar
EJERCICIO

Un programador ha desarrollado un código y nos han pedido que lo revisemos. Escribe este código en un editor y responde a las siguientes preguntas:

Código: [Seleccionar]
<html>

    <head>

                <meta charset="utf-8">

                <style type="text/css">

                input {margin:10px;}

                </style>

        <script>

            function Valida(formulario) {

                /* Validación de campos NO VACÍOS */

                if ((formulario.campo1.value.length == 0) || (formulario.campo2.value.length ==0) || (formulario.cpostal.value.length ==0) || (formulario.dni.value.length ==0) || (formulario.email.value.length ==0)) {

                    alert('Falta información');

                    return false;

                }

                if (isNaN(parseInt(formulario.campo2.value))) {

                    alert('El campo2 debe ser un número');

                    return false;

                }

                /* validación del CÓDIGO POSTAL*/

                var ercp=/(^([0-9]{5,5})|^)$/;

                if (!(ercp.test(formulario.cpostal.value))) {

                    alert('Contenido del código postal no es un código postal válido');

                    return false; }

                /* validación del DNI */

                var erdni=/(^([0-9]{8,8}\-[A-Z])|^)$/;

                if (!(erdni.test(formulario.dni.value))) {

                    alert('Contenido del dni no es un DNI válido.');

                    return false;  }

                /* validación del e-mail */

                var ercorreo=/^[^@\s]+@[^@\.\s]+(\.[^@\.\s]+)+$/;       

                if (!(ercorreo.test(formulario.email.value))) {

                    alert('Contenido del email no es un correo electrónico válido.');

                    return false; }

                /* si no hemos detectado fallo devolvemos TRUE */

                return true;

            }

        </script>

    </head>

    <body>

        <form name="miFormulario" onsubmit="return Valida(this);" action="http://aprenderaprogramar.com" >

            Campo1 <input type="text" name="campo1"><br>

            Campo2 (debe ser número) <input type="text" name="campo2"><br>

            Código postal <input type="text" name="cpostal"><br>

            DNI <input type="text" name="dni"><br>

            email <input type="text" name="email"><br>

            <input type="submit" value="Enviar" name="enviar">

        </form>

    </body>
</html>

Citar
a) ¿Cómo se realiza la comprobación de que no hay campos vacíos?

Código: [Seleccionar]
if ((formulario.campo1.value.length == 0) || (formulario.campo2.value.length ==0) || (formulario.cpostal.value.length ==0) || (formulario.dni.value.length ==0) || (formulario.email.value.length ==0)){
            alert('Falta información');
            return false;
        }

Citar
b) ¿Cómo se realiza la comprobación de que el campo 2 es un número?

Código: [Seleccionar]
if (isNaN(parseInt(formulario.campo2.value))) {
            alert('El campo2 debe ser un número');
            return false;
        }

Citar
c) ¿En qué consiste la validación del código postal? Explícala paso a paso. Pon ejemplos de tres valores válidos y tres valores no válidos.

Se inicializa una expresión regular mediante la variable local "ercp". Para que se cumpla la expresión regular el dato entredo en el campo "cpostal" tiene que empezar y acabar con un dígito numérico entre 0 y 9 y tiene que tener una longitud mínima y máxima de 5 dígitos.
La condicional que maneja dicho campo hace un test sobre el dato entredo. Si se cumple la expresión regular no se ejecuta el código de la condicional, pero si no se cumple, se muestra un mensaje: "Contenido del código postal no es un código postal válido" y la función devuelve false.

Valores válidos: 01234, 74384 ó 00000

Valores NO válidos: 9896j, 0.1234, ó 123456

Citar
d) ¿En qué consiste la validación del DNI? Explícala paso a paso. Pon ejemplos de tres valores válidos y tres valores no válidos.

Se inicializa una expresión regular mediante la variable local "erdni". Para que se cumpla la expresión regular el dato entredo en el campo "dni" tiene que empezar  con un dígito numérico entre 0 y 9 con una longítud mínima y máxima de 8 dígitos, seguido de un "-" y acabar cun un dígito (en mayúscula) entre A Y Z.
La condicional que maneja dicho campo hace un test sobre el dato entredo. Si se cumple la expresión regular no se ejecuta el código de la condicional, pero si no se cumple, se muestra un mensaje: "Contenido del dni no es un DNI válido." y la función devuelve false.

Valores válidos: 00000000-F, 93841827-S ó 01010101-A

Valores NO válidos: 12345678F, 92837465-w ó 1234567-T

Citar
e) ¿En qué consiste la validación del email? Explícala paso a paso. Pon ejemplos de tres valores válidos y tres valores no válidos.

Se inicializa una expresión regular mediante la variable local "ercorreo". Para que se cumpla la expresión regular el dato entredo en el campo "emaill" NO tiene que empezar  con "@" ni con un espacio en blanco. El símbolo "+" indica que la subcadena contiene el símbolo al que precede una o más veces. Luego tiene que contener un símbolo "@" seguido de una subcadena que no contenga ni "@", ni espacios en blanco, ni punto. Al final tiene que acabar con un punto y cualquier carácter las veces que queramos, que no se ni "@", ni punto, ni espacio en blanco y después de esa subcadena no puedo haber ningún carácter "@", ni espacio en blanco ni punto.
La condicional que maneja dicho campo hace un test sobre el dato entredo. Si se cumple la expresión regular no se ejecuta el código de la condicional, pero si no se cumple, se muestra un mensaje: "Contenido del email no es un correo electrónico válido." y la función devuelve false.

Valores válidos: jfkkjasl@fljafj.fjaksdjfa, ljfajs@jflkajf.34, 78484@787484.ji

Valores NO válidos: kfldsjf, @kfaslfs.jkflajskl, fjlsajl  @ jffkls.com

Citar
f) ¿Cómo se consigue que no se envíe el formulario si no se cumplen los requisitos exigidos?


Código: [Seleccionar]
onsubmit="return Valida(this);
Si la devolución de la función es false se cancela la acción del método "submit()".

Gracias.

PD: No estoy muy seguro si entiendo esto:

Código: [Seleccionar]
/(^([0-9]{5,5})|^)$/
Yo interpreto que significa: que la subcadena empiece y termine con un dígito de número entre 0 y 9 y que tenga un longitud mínima y máxima de 5 dígitos o que empiece. Pero que significa "|^". Que empiece pero con qué si luego no hay ningún carácter?

270
Buenas noche, pedro,,

Pensaba que el intérprete del navegador cuando se encontraba con una de las condicionales y se cumplí la misma no continuaba comprobando las demás. Entonces es mejor que haya sólo una condicional if else if y no muchas if's?

Aquí dejo el código mejorado según tus indicaciones.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

window.onload = function(){
selectPais = document.getElementById('pais');
selectCiudad = document.getElementById('ciudad');
selectPais.addEventListener('change', ciudadesCorrespondientes);
selectCiudad.addEventListener('change', paisCorrespondiente);
}

function ciudadesCorrespondientes(){

for(var i=1; i<selectCiudad.length; i++){
if(selectPais.options[selectPais.selectedIndex].value=='mexico'){
if(selectCiudad.options[i].value != 'mexico df' && selectCiudad[i].value != 'guadalajara'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}else if(selectPais.options[selectPais.selectedIndex].value=='espanya'){
if(selectCiudad.options[i].value != 'madrid' && selectCiudad[i].value != 'barcelona'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}else if(selectPais.options[selectPais.selectedIndex].value=='peru'){
if(selectCiudad.options[i].value != 'lima' && selectCiudad[i].value != 'trujillo'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}else if(selectPais.options[selectPais.selectedIndex].value=='colombia'){
if(selectCiudad.options[i].value != 'bogota' && selectCiudad[i].value != 'cali'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}else{
todosLosPaises();
}
}
}

function paisCorrespondiente(){

for(var i=1; i<selectPais.length; i++){
if(selectCiudad.options[selectCiudad.selectedIndex].value == 'mexico df' || selectCiudad.options[selectCiudad.selectedIndex].value == 'guadalajara'){
selectPais.options[1].selected = true;
if(selectPais.options[i].value != 'mexico'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}else if(selectCiudad.options[selectCiudad.selectedIndex].value == 'madrid' || selectCiudad.options[selectCiudad.selectedIndex].value == 'barcelona'){
selectPais.options[2].selected = true;
if(selectPais.options[i].value != 'espanya'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}else if(selectCiudad.options[selectCiudad.selectedIndex].value == 'lima' || selectCiudad.options[selectCiudad.selectedIndex].value == 'trujillo'){
selectPais.options[3].selected = true;
if(selectPais.options[i].value != 'peru'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}else if(selectCiudad.options[selectCiudad.selectedIndex].value == 'bogota' || selectCiudad.options[selectCiudad.selectedIndex].value == 'cali'){
selectPais.options[4].selected = true;
if(selectPais.options[i].value != 'colombia'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}else{
todasLasCiudades();
}
}
}

function todosLosPaises(){
for(var i=0; i<selectPais.length; i++){
selectPais.options[i].disabled = false;
}
selectCiudad.options[0].selected = true;
todasLasCiudades();
}

function todasLasCiudades(){
for(var i=0; i<selectCiudad.length; i++){
selectCiudad.options[i].disabled = false;
}
}

</script>
</head>
<body>
<select name="pais" id="pais" style="margin-right: 20px;">
<option value="">Elegir país</option>
<option value="mexico">México</option>
<option value="espanya">España</option>
<option value="peru">Peru</option>
<option value="colombia">Colombia</option>
</select>
<select name="ciudad" id="ciudad">
<option value="">Ejegir ciudad</option>
<option value="mexico df">México D.F.</option>
<option value="guadalajara">Guadalajara</option>
<option value="madrid">Madrid</option>
<option value="barcelona">Barcelona</option>
<option value="lima">Lima</option>
<option value="trujillo">Trujillo</option>
<option value="bogota">Bogotá</option>
<option value="cali">Cali</option>
</select>
</body>
</html>

Gracias.

271
Buenas noches, pedro,,

Uf, me costó corregirlo. Ahora creo que funciona correctamente tanto en chrome, como en firefox.

Gracias por la corrección y la ayuda. Te agredecería si le echarás otro vistazo más :)

Gracias.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

window.onload = function(){
selectPais = document.getElementById('pais');
selectCiudad = document.getElementById('ciudad');
selectPais.addEventListener('change', ciudadesCorrespondientes);
selectCiudad.addEventListener('change', paisCorrespondiente);
}

function ciudadesCorrespondientes(){

if(selectPais.options[selectPais.selectedIndex].value=='mexico'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad.options[i].value != 'mexico df' && selectCiudad[i].value != 'guadalajara'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}
}

if(selectPais.options[selectPais.selectedIndex].value=='espanya'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad.options[i].value != 'madrid' && selectCiudad[i].value != 'barcelona'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}
}

if(selectPais.options[selectPais.selectedIndex].value=='peru'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad.options[i].value != 'lima' && selectCiudad[i].value != 'trujillo'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}
}

if(selectPais.options[selectPais.selectedIndex].value=='colombia'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad.options[i].value != 'bogota' && selectCiudad[i].value != 'cali'){
selectCiudad.options[i].disabled = true;
}else{
selectCiudad.options[i].disabled = false;
}
}
}

if(selectPais.selectedIndex==0){
todosLosPaises();
}

}

function paisCorrespondiente(){

if(selectCiudad.options[selectCiudad.selectedIndex].value == 'mexico df' || selectCiudad.options[selectCiudad.selectedIndex].value == 'guadalajara'){
selectPais.options[1].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais.options[i].value != 'mexico'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}
}

if(selectCiudad.options[selectCiudad.selectedIndex].value == 'madrid' || selectCiudad.options[selectCiudad.selectedIndex].value == 'barcelona'){
selectPais.options[2].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais.options[i].value != 'espanya'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}
}

if(selectCiudad.options[selectCiudad.selectedIndex].value == 'lima' || selectCiudad.options[selectCiudad.selectedIndex].value == 'trujillo'){
selectPais.options[3].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais.options[i].value != 'peru'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}
}

if(selectCiudad.options[selectCiudad.selectedIndex].value == 'bogota' || selectCiudad.options[selectCiudad.selectedIndex].value == 'cali'){
selectPais.options[4].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais.options[i].value != 'colombia'){
selectPais.options[i].disabled = true;
}else{
selectPais.options[i].disabled = false;
}
}
}

if(selectCiudad.selectedIndex==0){
todasLasCiudades();
}
}

function todosLosPaises(){
for(var i=0; i<selectPais.length; i++){
selectPais.options[i].disabled = false;
}
selectCiudad.options[0].selected = true;
todasLasCiudades();
}

function todasLasCiudades(){
for(var i=0; i<selectCiudad.length; i++){
selectCiudad.options[i].disabled = false;
}
}

</script>
</head>
<body>
<select name="pais" id="pais" style="margin-right: 20px;">
<option value="">Elegir país</option>
<option value="mexico">México</option>
<option value="espanya">España</option>
<option value="peru">Peru</option>
<option value="colombia">Colombia</option>
</select>
<select name="ciudad" id="ciudad">
<option value="">Ejegir ciudad</option>
<option value="mexico df">México D.F.</option>
<option value="guadalajara">Guadalajara</option>
<option value="madrid">Madrid</option>
<option value="barcelona">Barcelona</option>
<option value="lima">Lima</option>
<option value="trujillo">Trujillo</option>
<option value="bogota">Bogotá</option>
<option value="cali">Cali</option>
</select>
</body>
</html>

272
Buenas tardes. Subo una posible solución del ejercicio CU01184E del curso JavaScript desde cero.

Citar
EJERCICIO

Escribe este código en un editor y responde a las siguientes preguntas:

Código: [Seleccionar]
<!DOCTYPE html>

<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">

</head>

<body><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos JavaScript</h3>

<a href="javascript:void(0);" onclick="if (confirm('Are you sure?')) { var f = document.createElement('form');

 f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input');

 m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);

 var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token');

 s.setAttribute('value', 'aprenderaprogramar.com='); f.appendChild(s);f.submit(); };return false;">Pulsa aquí para proceder</a>
</body></html>

Citar
a) ¿Para qué se utiliza aquí javascript: void(0)?

Citar
Void es un operador JavaScript que evalúa (ejecuta) la expresión que se le pasa como argumento y a continuación devuelve <<undefined>>. En este caso, javascript:void(0) ejecuta 0, que en realidad no tiene ningún efecto, y devuelve undefined. ¿Y qué significa esto? Pues lo mismo que href="javascript://", es decir, que simplemente se crea un link que no enlaza con ningún lado (o podríamos decir que enlaza con undefined, lo cual es enlazar con ningún lado).

Citar
b) Explica paso a paso qué es lo que hace el código JavaScript que se ha incluido como respuesta al evento click.

Primero se establece una condicional mediante el método "confirm()" al que si se cumple se ejecuta el código a continuación. La variable local f es referenciada a la creación de un formulario. Después se establece, para dicho formulario, un estilo de tipo 'none', es decir, que no será visible. Mediante la instrucción "this.parentNode.appendChild(f)" se incluye el formulario en el padre del elemento <a>, es decir, al <body>. Para el atributo method del fomulario se establece "post", para el atributo action se establece el mismo valor que tenía el elemento que recibe el evento. A través de la variable local "m" se crea un elemento tipo "input". Para este elemento se modifican los atributos "type" a "hidden", el "name" a "_method" y el "value" a "delete". Dicho elemento se incluye al formulario mediante la instrucción: "f.appendChild(m)".
La variable local "s" crea otro elemento "input". Para este elemento se modifican los atributos: "type" a "hidden", "name" a "authenticity_token" y "value" a "aprenderaprogramar.com=". También se incluye al formulario (f.appendChild(s)). Se envía el formulario con la instrucción: "f.submit()".

Citar
c) ¿Qué implica el uso de return false; en este código?

Impide el envío del formulario, cancela la acción (submit()) que está establecida por defecto a dicho método.

Citar
d) Modifica el código para que la apariencia y resultados sean iguales pero sin usar un elemento <a> … </a>

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title>
<meta charset="utf-8">
<style type="text/css">
span{
color: blue;
cursor: pointer;
text-decoration: underline;
}
</style>
</head>
<body>
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
<span href="javascript:void(0);" onclick="if (confirm('Are you sure?')) { var f = document.createElement('form');f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input');m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token');s.setAttribute('value', 'aprenderaprogramar.com='); f.appendChild(s);f.submit(); };return false;">Pulsa aquí para proceder
  </span>
</body>
</html>

Gracias

273
Buenas, pedro,,

Gracias por corregirme el ejercicio y por tu tiempo.

No se en que navegador lo estás probando. A mi me funciona correctamente (probado en firefox y chrome). Para que te vuelva a dejar elegir cualquier país o ciudad tiene que hacer click en: "elegir país" o "elegir ciudad" respectivamente.

Subo el código otra vez a ver si me he equivocado yo en subirlo

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

window.onload = function(){
selectPais = document.getElementById('pais');
selectCiudad = document.getElementById('ciudad');
selectPais.addEventListener('change', ciudadesCorrespondientes);
selectCiudad.addEventListener('change', paisCorrespondiente);
selectPais[0].addEventListener('click', todosLosPaises);
selectCiudad[0].addEventListener('click', todasLasCiudades);
}

function ciudadesCorrespondientes(){
if(selectPais.value=='mexico'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'mexico df' && selectCiudad[i].value != 'guadalajara'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
if(selectPais.value=='espanya'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'madrid' && selectCiudad[i].value != 'barcelona'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
if(selectPais.value=='peru'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'lima' && selectCiudad[i].value != 'trujillo'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
if(selectPais.value=='colombia'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'bogota' && selectCiudad[i].value != 'cali'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
}

function paisCorrespondiente(){
if(selectCiudad.value == 'mexico df' || selectCiudad.value == 'guadalajara'){
selectPais[1].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'mexico'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
if(selectCiudad.value == 'madrid' || selectCiudad.value == 'barcelona'){
selectPais[2].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'espanya'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
if(selectCiudad.value == 'lima' || selectCiudad.value == 'trujillo'){
selectPais[3].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'peru'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
if(selectCiudad.value == 'bogota' || selectCiudad.value == 'cali'){
selectPais[4].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'colombia'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
}

function todosLosPaises(){
for(var i=1; selectPais.length; i++){
selectPais[i].disabled = false;
}
}

function todasLasCiudades(){
for(var i=1; selectCiudad.length; i++){
selectCiudad[i].disabled = false;
}
}

</script>
</head>
<body>
<select name="pais" id="pais" style="margin-right: 20px;">
<option value="">Elegir país</option>
<option value="mexico">México</option>
<option value="espanya">España</option>
<option value="peru">Peru</option>
<option value="colombia">Colombia</option>
</select>
<select name="ciudad" id="ciudad">
<option value="">Ejegir ciudad</option>
<option value="mexico df">México D.F.</option>
<option value="guadalajara">Guadalajara</option>
<option value="madrid">Madrid</option>
<option value="barcelona">Barcelona</option>
<option value="lima">Lima</option>
<option value="trujillo">Trujillo</option>
<option value="bogota">Bogotá</option>
<option value="cali">Cali</option>
</select>
</body>
</html>

Gracias.

274
Buenas tardes.

A continuación hago entrega de la propuesta de solución al ejercicio CU01183E del curso JavaScript desde cero de aprenderaprogramar.

Citar
EJERCICIO

Crear el código HTML y JavaScript que cumpla con las siguientes funciones:

a) Deberá presentarse un formulario con 2 elementos select. El primer elemento select permitirá elegir país y podrá elegirse entre México, España, Perú y Colombia.

b) El segundo elemento select permitirá elegir ciudad y podrá elegirse entre México D.F., Guadalajara, Madrid, Barcelona, Lima, Trujillo, Bogotá y Cali.

c) Si el usuario selecciona ciudad sin haber elegido país, deberá mostrarse como opción elegida de país el país correspondiente a la ciudad. Por ejemplo, si el usuario selecciona Bogotá deberá aparecer como país seleccionado Colombia.

d) Si el usuario selecciona un país en primer lugar, deberán deshabilitarse todas las opciones que no correspondan a ciudades de ese país. Por ejemplo si el usuario elige España, sólo podrá elegir entre Madrid y Barcelona, debiendo estar México D.F., Guadalajara, Lima, Trujillo, Bogotá y Cali deshabilitadas. Si el usuario cambia el país, deberán cambiar las ciudades cuya elección es posible.

e) Ampliación opcional para el ejercicio: introduce medidas de seguridad adicionales para que no puedan existir incoherencias entre el país seleccionado y la ciudad. Por ejemplo, imagina que el usuario elige en primer lugar como ciudad México D.F. y luego elige como país Perú. Introduce medidas de seguridad que impidan que esto suceda.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">

window.onload = function(){
selectPais = document.getElementById('pais');
selectCiudad = document.getElementById('ciudad');
selectPais.addEventListener('change', ciudadesCorrespondientes);
selectCiudad.addEventListener('change', paisCorrespondiente);
selectPais[0].addEventListener('click', todosLosPaises);
selectCiudad[0].addEventListener('click', todasLasCiudades);
}

function ciudadesCorrespondientes(){
if(selectPais.value=='mexico'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'mexico df' && selectCiudad[i].value != 'guadalajara'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
if(selectPais.value=='espanya'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'madrid' && selectCiudad[i].value != 'barcelona'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
if(selectPais.value=='peru'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'lima' && selectCiudad[i].value != 'trujillo'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
if(selectPais.value=='colombia'){
for(var i=1; i<selectCiudad.length; i++){
if(selectCiudad[i].value != 'bogota' && selectCiudad[i].value != 'cali'){
selectCiudad[i].disabled = true;
}else{
selectCiudad[i].disabled = false;
}
}
}
}

function paisCorrespondiente(){
if(selectCiudad.value == 'mexico df' || selectCiudad.value == 'guadalajara'){
selectPais[1].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'mexico'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
if(selectCiudad.value == 'madrid' || selectCiudad.value == 'barcelona'){
selectPais[2].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'espanya'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
if(selectCiudad.value == 'lima' || selectCiudad.value == 'trujillo'){
selectPais[3].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'peru'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
if(selectCiudad.value == 'bogota' || selectCiudad.value == 'cali'){
selectPais[4].selected = true;
for(var i=1; i<selectPais.length; i++){
if(selectPais[i].value != 'colombia'){
selectPais[i].disabled = true;
}else{
selectPais[i].disabled = false;
}
}
}
}

function todosLosPaises(){
for(var i=1; selectPais.length; i++){
selectPais[i].disabled = false;
}
}

function todasLasCiudades(){
for(var i=1; selectCiudad.length; i++){
selectCiudad[i].disabled = false;
}
}

</script>
</head>
<body>
<select name="pais" id="pais" style="margin-right: 20px;">
<option value="">Elegir país</option>
<option value="mexico">México</option>
<option value="espanya">España</option>
<option value="peru">Peru</option>
<option value="colombia">Colombia</option>
</select>
<select name="ciudad" id="ciudad">
<option value="">Ejegir ciudad</option>
<option value="mexico df">México D.F.</option>
<option value="guadalajara">Guadalajara</option>
<option value="madrid">Madrid</option>
<option value="barcelona">Barcelona</option>
<option value="lima">Lima</option>
<option value="trujillo">Trujillo</option>
<option value="bogota">Bogotá</option>
<option value="cali">Cali</option>
</select>
</body>
</html>

Gracias

275
Buenas tardes, César y pedro,,

Primero que nada quería daros las gracias por los comentarios, y por las extensas correcciones :)

César, tienes razón, no debería de haber usado los mismos nombres como variables y como id's de las etiquetas.

Sobre las variables globales: para que una función conozca el parámetro de otra pensaba que estaba bien utilizar variables globales y no de ámbito local. Es por eso porque he utilizado las variables globales.

Es muy buena idea lo que me comentas que el momento de desaparecer el mensaje de error sea cuando empiezas a escribir algo en el campo y no cuando pierde el foco.

pedro,, , el modo de elegir así los elementos lo había visto comentado por bermartinv en algún ejercicio tuyo (o quizás en alguna suyo), pero recuerdo que lo había dicho él y lo puse en práctica. Pensaba que no era de práctica no recomendada.

Gracias

276
Buenas noches. Mediante el presente hago entrega del ejercicio CU01182E del curso JavaScript desde cero.

Citar
EJERCICIO

Dado el siguiente código HTML que contiene un formulario con tres campos (nombre, apellidos y email):

Código: [Seleccionar]
<!DOCTYPE html>

<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">

<style type="text/css">body {background-color:yellow; font-family: sans-serif;}

label{color: maroon; display:block; padding:5px;}

</style>

</head>

<body>

<div id="cabecera"><h1>Portal web aprenderaprogramar.com</h1><h2>Didáctica y divulgación de la programación</h2>

</div>

<!-- Formulario de contacto -->

<form name ="formularioContacto" class="formularioTipo1" method="get" action="http://aprenderaprogramar.com">

<p>Si quieres contactar con nosotros envíanos este formulario relleno:</p>

<label for="nombre"><span>Nombre:</span> <input id="nombre" type="text" name="nombre" /></label>

<label for="apellidos"><span>Apellidos:</span> <input id="apellidos" type="text" name="apellidos" /></label>

<label for="email"><span>Correo electrónico:</span> <input id="email" type="text" name="email" /></label>

<label><input type="submit" value="Enviar"><input type="reset" value="Cancelar"></label>

</form>

</body></html>

Citar
Crear el código JavaScript que cumpla con las siguientes funciones:

a) Si la longitud (número de caracteres) del campo nombre es mayor de 15 o igual a cero, el formulario no se enviará.

b) Si la longitud (número de caracteres) del campo apellidos es mayor de 30 o igual a cero, el formulario no se enviará.

c) Si la longitud (número de caracteres) del campo email es mayor de 35 o igual a cero, el formulario no se enviará. Si el email no contiene el carácter @ el formulario no se enviará.

d) Si se produce cualquiera de las circunstancias anteriores, debe aparecer un recuadro con color de fondo naranja y texto negro a la derecha de la casilla de introducción de datos, informando del problema detectado en ese campo (si es que ese campo presenta algún problema). Nota: estos mensajes se deben mostrar sólo si el campo es erróneo después de pulsado el botón enviar, y deben desaparecer si el usuario realiza un nuevo intento y el campo es correcto. Los mensajes se incorporarán al DOM (no serán mensajes usando alert).

Ejemplo de ejecución. El usuario deja el nombre, apellidos y correo electrónico vacíos. A la derecha de las casillas de introducción de datos aparecerá: El nombre no puede estar vacío. Los apellidos no pueden estar vacíos. El correo electrónico no puede estar vacío.

Ahora el usuario introduce nombre: <<Juan Manuel de Todos los Santos Efímeros Ecuánimes de Todos los días de la Tercera Edad>>. Como apellidos introduce: <<Suárez>>. Y como correo electrónico introduce lo siguiente: << juanmanueldetodoslosantosefimerosecuanimesdetodoslosdias@gmail.com>>. Pulsa enviar. A la derecha de la casilla de introducción del nombre debe aparecer: “Nombre demasiado largo. Máximo 15 caracteres”. A la derecha de apellidos no aparecerá nada porque el apellido es correcto. A la derecha del correo electrónico debe aparecer: “Correo electrónico demasiado largo. Máximo 35 caracteres”. Ahora el usuario escribe como nombre: Juan Manuel. Como apellidos: Suárez. Y como correo electrónico juanmanuel@gmail.com. Pulsa enviar y el formulario es enviado.

El código quedará de la siguiente manera:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Ejemplo aprenderaprogramar.com</title>
  <style type="text/css">
  body{
    background-color: yellow;
    font-family: sans-serif;
  }
  label{
    color: maroon;
    display: block;
    padding: 5px;
  }
  </style>
  <script type="text/javascript">

    var nombre = false;
    var apellidos = false;
    var correo = false;

  window.onload = function(){
  document.formularioContacto.nombre.focus();
  document.formularioContacto.addEventListener('submit', enviarFormulario);
  document.formularioContacto.nombre.addEventListener('blur', verificarNombre);
  document.formularioContacto.apellidos.addEventListener('blur', verificarApellidos);
  document.formularioContacto.email.addEventListener('blur', verificarCorreo);
  formulario = document.formularioContacto;
  }

  function verificarNombre(){
  if(/^\D{1,15}$/.test(formulario.nombre.value)==false){
  error1.style.backgroundColor = 'orange';
  error1.style.color = 'black';
  error1.innerHTML = 'El nombre es obligatorio y debe ser menos de 15 carácteres';
  }else{
  error1.innerHTML = '';
  nombre = true;
  }
  }

  function verificarApellidos(){
  if(/^\D{1,30}$/.test(formulario.apellidos.value)==false){
  error2.style.backgroundColor = 'orange';
  error2.style.color = 'black';
  error2.innerHTML = 'Los apellidos son obligatorios y deben ser menos de 30 carácteres';
  }else{
  error2.innerHTML = '';
  apellidos = true;
  }
  }

  function verificarCorreo(){
  if(/^\D{1,35}$/.test(formulario.email.value)==false || (formulario.email.value).match(/@/)==null){
  error3.style.backgroundColor = 'orange';
  error3.style.color = 'black';
  error3.innerHTML = 'El correo electrónico es obligatorio, deben ser menos de 35 carácteres y tiene que contener el símbolo "@"';
  }else{
  error3.innerHTML = '';
  correo = true;
  }
  }

  function enviarFormulario(evObject){
  evObject.preventDefault();
  if(nombre && apellidos && correo){
  formulario.submit();
  }else{
  alert('Corrija los errores!!!')
  if(!nombre){
  formulario.nombre.focus();
  }else if(!apellidos){
  formulario.apellidos.focus();
  }else{
  formulario.email.focus();
  }
  }
  }

  </script>
</head>
<body>
  <div id="cabecera">
    <h1>Portal web aprenderaprogramar.com</h1>
    <h2>Didáctica y divulgación de la programarción</h2>
  </div>
  <!-- Formulario de contacto -->
  <form action="http://aprenderaprogramar.com" name="formularioContacto" class="formularioTipo1" method="get">
    <p>Si quieres contactar con nosotros envíanos este formulario relleno:</p>
    <label for="nombre"><span>Nombre:</span><input type="text" id="nombre" name="nombre"> <span id="error1"></span></label>
    <label for="apellidos"><span>Apellidos:</span><input type="text" id="apellidos" name="apellidos"> <span id="error2"></span></label>
    <label for="email"><span>Correo electrónico:</span><input type="text" id="email" name="email"> <span id="error3"></span></label>
    <label><input type="submit" value="Enviar"><input type="reset" value="Cancelar"></label>
  </form>
</body>
</html>

Gracias.

277
Buenas tardes, pedro,,

Leí el enlace que me facilitasté. Ví que a ti también te surgió la misma duda que a mí :)
Ahora tengo más claro porque el bucle se formuló de manera no "tradicional". Es un poco lioso, pero supongo que con práctica se me quedará.

Gracias por corregirme el ejericicio y por darme una explicación a mi duda.

Saludos

PD: Releeré otra vez el enlace para poder quedarme con los conceptos :)

278
Buenas tardes,

y gracias tanto a Pedro como a Mario por vuestro tiempo y corregirme el ejercicio.

Es un poquito complejo para mi entender las cuestiones matemáticas dado que antes de empezar a dedicarme a programación mi campo de estudios ha sido totalmente diferente, pero con vuestras explicaciones se me acalaran las cosas (poco a poco, jeje).

Tiens razón, Pedro, no entedía muy bien lo que devolvía la función conversor, puesto que no habíamos visto hasta ahora en el curso la impresión de variables con comas. Hasta hoy siempre concatenabamos con el signo '+' y nunca con ','. Creo que se nota, porque he puesto la concatenación de la nueva variable con '+'.

Tampoco sé que función cumple el método '.join'. No lo busqué en Internet porque pensé que en futuras entregas se explicará.

Gracias y saludos :)

Además, tampoco entiendo porque lo que devuelve la función conversor está puesto como un array, es decir, entre: [].

279
Buenas tardes.

Hago la entrega del ejercicio CU0081E del curso JavaScript desde cero.

Citar
EJERCICIO Y EJEMPLO

Otra forma de detener el envío de un formulario se basa en que si el código de respuesta a un evento submit es el valor booleano false, no se producirá el envío del formulario. En otro caso, sí se producirá el envío. Examina el siguiente código y responde a las cuestiones que se muestran a continuación:

Código: [Seleccionar]
<!DOCTYPE html>

<html><head><script>

function validarForm() {

    var x = document.forms["elForm1"]["nombre"].value;

    if (x==null || x=="") { alert("El formulario no puede enviarse sin rellenar el nombre");

        return false; }

}

</script></head>

<body><form style ="margin:30px;" name="elForm1" action="http://aprenderaprogramar.com" onsubmit="return validarForm()" method="get">

Nombre: <input type="text" name="nombre">

<input type="submit" value="Enviar">

</form>
</body></html>

Citar
a) ¿Qué cometido cumple este código?

Antes de envíar el formulario verifica si el campo 'nombre' contiene algún valor.

Citar
b) ¿Qué ocurre si en lugar de onsubmit="return validarForm()" escribes onsubmit="validarForm()"? ¿Por qué?

El formulario se envía sin tener en cuenta lo que devuelve la función. Se envía porque al eleminar 'return' del atributo 'onsubmit' no condicionamos la acción con lo qué nos devolverá la función.

Citar
c) Si x no es null ni es vacío, ¿qué devuelve la función validarForm()? ¿Qué implicaciones tiene esto en relación al envío del formulario?

No devolverá nada. La función devolverá false únicamente en el caso si la 'x' es null o vacía. Si no devuelve nada se ejecuta la acción por defecto(que es enviar el formulario).

280
Buenas tardes. Hago la entrega del ejercicio CU01180E del curso JavaScript desde cero.

Citar
EJERCICIO

Examina el siguiente código y responde a las cuestiones que se muestran a continuación:

Código: [Seleccionar]
var arr = [];

var divs = document.querySelectorAll('div');

for(var i = divs.length; i--; arr.unshift(divs[i]));

Citar
a) ¿Qué cometido cumple este código?

Primero creamos un array vacío. Luego inicializamos la variable 'divs' como un nodeList de los elementos con tag 'div'. Finalmente añadimos (al principio) del array todos los elementos divs.

Citar
unshift(x) - Añade x al principio del array como nuevo (o nuevos) elementos.

Respuesta obtenida de la entrega CU01153E del curso JavaScript desde cero

https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=834:funciones-arrays-javascript-push-sort-ordenar-numeros-concat-join-pop-shift-slice-splice-etc-cu01153e&catid=78:tutorial-basico-programador-web-javascript-desde-&Itemid=206

Citar
b) Aplicando la idea que podemos extraer de este código, modifica el código que hemos visto como ejemplo en esta entrega para crear un array con los elementos input y select del formulario y  mostrar por pantalla el número de elementos input y select existentes en el formulario.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<style type="text/css">
body{
margin-left:30px;
font-family: sans-serif;
}
.estiloForm{
background-color: #f3f3f3;
border: solid 2px black;
margin-left:20px;
width: 330px;
padding:10px;
}
.estiloForm label{
display: block;
width: 120px;
float: left;
text-align:right;
margin-bottom: 35px;
padding-right: 20px;
}
br{
clear: left;
}
input[type="submit"], input[type="reset"]{
margin:25px 5px 10px 5px;
}
</style>
<script type="text/javascript">

window.onload = function(){
var elementosInput = document.getElementsByTagName('input'); //Elementos input
var elementosSelect = document.getElementsByTagName('select');
var arrayNodos = [];
for(var i=elementosInput.length; i--; arrayNodos.unshift(elementosInput[i]));
for(var i=elementosSelect.length; i--; arrayNodos.unshift(elementosSelect[i]));
alert('Tenemos un número de elementos input ó select en el formulario: '+arrayNodos.length);
}

</script>
</head>
<body>
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
<div class="estiloForm">
<form action="#" name="formularioContacto" method="get">
<label>Tratamiento</label>
<input type="radio" name="tratamiento" id="tratarSr" value="Sr.">Sr.
<input type="radio" name="tratamiento" id="tratarSra" value="Sra.">Sra. <br>
<label>Nombre</label><input type="text" id="nombre" name="nombre"><br>
<label>Apellidos</label><input type="text" id="apellidos" name="apellidos"><br>
<label>Dirección</label><input type="text" id="direccion1" name="direccion1"><br>
<label>Ciudad</label>
<select name="ciudad" id="ciudad">
<option value="">Elija opción</option>
<option value="Madrid">Madrid (ES)</option>
<option value="Mexico">México D.F.(MX)</option>
<option value="Santiago">Santiago (CL)</option>
</select><br>
<label>Preferencias</label><input type="checkbox" name="Libros">Libros
<input type="checkbox" name="Peliculas">Películas
<input type="submit" value="Enviar"><input type="reset" value="Cancelar">
</form>
</div>
</body>
</html>

Lo que no entiendo es la lógica del bucle. Normalmente la estructura de un bucle es: primero se inicializa la variable desde el valor que empezará, luego la condición de su salida y al fin la incrementación o disminución de la variable. Pero en este bucle tenemos el valor inicial de la variable y si disminución, pero no veo la condición de salida del bucle. O al ser un array al que añadimos los elementos al llegar a 0 se saldrá del bucle?

Gracias.

Páginas: 1 ... 9 10 11 12 13 [14] 15 16 17 18 19 ... 30

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".