Autor Tema: significado de javascript: void(0) para qué sirve dentro href ejemplo CU01184E#  (Leído 5052 veces)

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Hola chicos adjunto mis soluciones a este tema (CU01184E del tutorial básico de programación web: JavaScript desde cero)

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)?


Aquí se utiliza para que la etiqueta a de HTML que enlaza a otra página web (en general) al recibir el evento click no se redireccione a ningún sitio y se ejecute el javascript que tenemos dentro de onclick.


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

Inicialmente se espera una respuesa Aceptar/Cancelar a la pregunta 'Are you sure?'
Si pulsamos cancelar devuelve false  no haria nada, al devolver false el evento anula la accion de href,aunque en este caso con la sentencia que tiene no se redireccionaba a ningun sitio.

 var f = document.createElement('form');  crea la etiqueta de formulario

  f.style.display = 'none'; // se le da el estilo de la etiqueta del form display:none, por lo que no se mostrará

  this.parentNode.appendChild(f); //se añade el elemento form al codigo html a parentNode que era body

  f.method = 'POST'; // se añade atributos a la etiqueta form, en este caso method='POST'

  f.action = this.href; // se añade atributos a la etiqueta form, en este caso action='javascript:void(0)'(el mismo href de este elemento)

  var m = document.createElement('input'); //creamos un elemento input
 m.setAttribute('type', 'hidden');// definimos atributos del nuevo elemento y le indicamos que es invisible type=hydden

  m.setAttribute('name', '_method');  // definimos atributo name='_method'

  m.setAttribute('value', 'delete'); // denimos atributo value='delete'

  f.appendChild(m); // añadimos el elemento input y lo insertamos como hujo de f

  var s = document.createElement('input'); //creamos un elemento input

  s.setAttribute('type', 'hidden'); // definimos atributos del nuevo elemento y le indicamos que es invisible type=hydden

  s.setAttribute('name', 'authenticity_token'); // definimos name='authenticity_token'

 s.setAttribute('value', 'aprenderaprogramar.com='); // definimos el atributo value=''aprenderaprogramar.com='

  f.appendChild(s);// lo añadimos como hijo del form

  f.submit(); //enviamos el formulario

  };


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

el return false; es para que no se ejecute el href='' que tiene definido


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>
    p.url{
        cursor:pointer;
        color:blue;
        text-decoration:underline;
}
    </style>
<script>
    window.onload = function(){
        var formulario = document.getElementById('enlace').addEventListener('click',anyadir);
    }
   
    function anyadir(){
        if (confirm('Are you sure?')) {
            var f = document.createElement('form');
            f.style.display = 'none';
            this.parentNode.appendChild(f);
            f.method = 'POST';
            f.action = '';
            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;
    }
</script>
</head>

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

<p class='url' id='enlace'  >Pulsa aquí para proceder</p>
</body></html>

Saludos!!
« Última modificación: 01 de Abril 2016, 11:32 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Buenos días

Las respuestas son acertadas

Hay algo peculiar en el código propuesto en el ejercicio: además de crear un formulario oculto, que ya es un poco extraño, si se pulsa cancelar no hace nada, y si se pulsa aceptar tampoco hace nada porque tiene establecido f.action = this.href y como this.href es javascript:void(0); pues no hace nada

Para que se envíe el formulario podemos cambiar simplemente f.action = 'http://aprenderaprogramar.com', de ese modo cuando pulsemos aceptar ya se envía el formulario y por lo menos "observamos que pasa algo"

En el código corregido que has propuesto ocurre lo mismo

Al tener f.action = ''; cuando se pulsa aceptar no ocurre nada

Podemos hacer que se envíe el formulario escribiendo f.action = 'http://aprenderaprogramar.com'; y de esa forma "observamos que pasa algo"


Saludos

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Si,
el ejercicio es muy curioso y demuestra la importancia de navegar por webs seguras. Hay muchas cosas que se pueden hacer por detrás de una web y que el usuario no se dá cuenta que suceden.
 

 

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".