Foros del Web » Programando para Internet » Javascript »

Duda con EventListeners

Estas en el tema de Duda con EventListeners en el foro de Javascript en Foros del Web. Buenas tardes, y gracias por pasarse por aquí. Resulta que estoy aprendiendo JavaScript (para aprender Angular y Node). Estoy viendo el tema de los Event ...
  #1 (permalink)  
Antiguo 11/08/2014, 15:42
 
Fecha de Ingreso: agosto-2014
Mensajes: 2
Antigüedad: 9 años, 9 meses
Puntos: 0
Duda con EventListeners

Buenas tardes, y gracias por pasarse por aquí.

Resulta que estoy aprendiendo JavaScript (para aprender Angular y Node). Estoy viendo el tema de los Event Listeners de JavaScript y me surgió un problema con un ejercicio.

Dado un HTML sencillo que consta de dos elementos: <p> y <button>, quiero realizar lo siguiente:

1.- Agregar un EventListener de tipo 'click' al button para que pueda remover el párrafo.
2.- Luego de remover el párrafo, eliminar dicho EventListener y asignarle otro para que pueda 'restaurar' el párrafo (lo hago con la propiedad css display).
3.- Luego de restuarar el párrafo, eliminar dicho eventListener y asignarle el EventListener para remover el párrafo.

1.- Button -> addEventListener ('click', remover, false);
[Párrafo removido]
2.- Button -> RemoveEventListener('click', remover, false);
Button -> addEventListener('click', restaurar, false);
[Párrafo restaurado]
3.- Button -> removeEventListener('click', restaurar, false);
Button -> addEventListener('click', remover, false);


Les dejo el ejemplo en JSFiddle: http://jsfiddle.net/n22c162t

[iframe width="100%" height="600" src="http://jsfiddle.net/n22c162t/embedded/" allowfullscreen="allowfullscreen" frameborder="0"][/iframe]


Gracias.

Última edición por MGGMX; 11/08/2014 a las 17:03
  #2 (permalink)  
Antiguo 11/08/2014, 19:02
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: Duda con EventListeners

El problema ocurre porque dentro de cada método, invocas al otro utilizando la palabra reservada this cuando en ese ámbito este ya cambió pues al ser desencadenado por el evento click en el botón, este sería el nuevo this. Una alternativa de solución consiste en que crees una copia de la clase en una variable e invoques a sus métodos tomándola como punto de apoyo.

Código Javascript:
Ver original
  1. var Pagina = function () {
  2.     var parrafo = document.getElementById("publicacion-texto"),
  3.         boton = document.getElementById("btn-remover"),
  4.         self = this;
  5.    
  6.     this.restaurar = function () {
  7.         parrafo.style.display = 'block';
  8.         boton.removeEventListener('click', self.restaurar, false);
  9.         boton.addEventListener('click', self.remover, false);
  10.         boton.innerHTML = 'Haz click aquí para remover el texto';
  11.     };
  12.    
  13.     this.remover = function () {
  14.         parrafo.style.display = 'none';
  15.         boton.removeEventListener('click', self.remover, false);
  16.         boton.addEventListener('click', self.restaurar, false);
  17.         boton.innerHTML = 'Haz click aquí para restaurar el texto';
  18.     };
  19.    
  20.     this.agregarEventoBtn = function () {
  21.         boton.addEventListener('click', self.remover, false);
  22.     };
  23. };

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: html, js
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:18.