Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] AddEventListener me va a volver loca!

Estas en el tema de AddEventListener me va a volver loca! en el foro de Javascript en Foros del Web. Muy buenas gente: Por fin me he decidido a registrarme después de haber consultado miles de veces vuestro foro para aprender cosas acerca del proyecto ...
  #1 (permalink)  
Antiguo 24/02/2013, 06:13
Avatar de juliet14  
Fecha de Ingreso: febrero-2013
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 2
Busqueda AddEventListener me va a volver loca!

Muy buenas gente:
Por fin me he decidido a registrarme después de haber consultado miles de veces vuestro foro para aprender cosas acerca del proyecto que me encuentro haciendo.

El caso es que estoy haciendo una web, con servidor local (xampp) de la mano de AJAX (sin ningún framework).

Se trata de una pagina en la cual el usuario inicia sesión y va navegando entre páginas (xmlHttpRequest) hasta que llega a la deseada. La web es un examen online, y tengo parte de profesor y parte de alumno.

Al grano:

Estoy utilizando addEventListener sobre los botones que tengo (por ejemplo: iniciar sesion, dar de alta usuario...etc) Y es que antes utilizaba onclick con boton "submit", que redirigia a una función comprobar() para que los campos de usuario y clave no estuvieran vacios. Hasta aqui todo bien.
Para la navegación entre las siguientes páginas, decidí utilizar addEventListener porque me pareció mas limpio a nivel de código, pero aquí viene mi dolor de cabeza....
FUNCIONA CUANDO LE DA LA GANA!
Hay algunas páginas que no funcionan y ya esta, y otras que si haces varias veces click, dice venga va, voy a funcionar ya que insistes!

He probado en Firefox, y en google chrome a la vez, y me pasa que si en Firefox funciona, en google chrome no, y al revés!

Decidme si no es para volverse loco!

Os pongo un trozo de código (cosa que yo creo que es correcto).
usuario, examenes y estadisticas son mis botones:

Código Javascript:
Ver original
  1. function manejaGU(){
  2.         initReq("POST","profesorGestionaUsuarios.php",true);
  3.     }
  4.     function manejaGE(){
  5.         initReq("POST","profesorGestionaExamenes.php",true);
  6.     }
  7.     function manejaVE(){
  8.         initReq("POST","profesorVisualizaEstadisticas.php",true);
  9.     }
  10.  
  11.     function inicia_Eventos(){
  12.         var gu=document.getElementById('usuarios');
  13.         var ge=document.getElementById('examenes');
  14.         var ve=document.getElementById('estadisticas');
  15.        
  16.          gu.addEventListener('click',manejaGU,false);
  17.                    
  18.          ge.addEventListener('click',manejaGE);
  19.  
  20.          ve.addEventListener('click',manejaVE);
  21.  
  22.    //por aqui mas funciones
  23.  
  24.  window.addEventListener('load', inicia_Eventos, false);/*esto lo pongo lo ultimo antes de </script>*/
  25.  
  26.  
  27.     }

AH! También me ha pasado que si quitaba el false de addEventListener o lo volvía a poner, también funciona cuando quiere...

Un alma caritativa que me ayude a entender
Gracias de antemano!
  #2 (permalink)  
Antiguo 24/02/2013, 15:04
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 16 años, 3 meses
Puntos: 103
Respuesta: AddEventListener me va a volver loca!

talvez te falto el, preventDefault();
prueba asi las funciones
Código Javascript:
Ver original
  1. function manejaGU(evento){
  2. evento.preventDefault();
  3.         initReq("POST","profesorGestionaUsuarios.php",true);
  4.     }
  5.     function manejaGE(evento){
  6. evento.preventDefault();
  7.         initReq("POST","profesorGestionaExamenes.php",true);
  8.     }
  9.     function manejaVE(evento){
  10. evento.preventDefault();
  11.         initReq("POST","profesorVisualizaEstadisticas.php",true);
  12.     }

Un saludo!! :)
  #3 (permalink)  
Antiguo 25/02/2013, 01:49
Avatar de juliet14  
Fecha de Ingreso: febrero-2013
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: AddEventListener me va a volver loca!

Hola de nuevo,

Gracias por tu respuesta, pero permíteme contestarte con otra pregunta:
-No se supone que al objeto.addeventlistener('click',manejaAlgo,false)
a "manejaAlgo" no se le puede pasar ni argumentos ni poner paréntesis delante?

Eso es lo que he leido y releido en foros...
Por otra parte, no entiendo muy bien tu solución... es decir, serviría para evitar otros eventos anteriores guardados? o como?

Mil gracias por tu paciencia.

saludos!
  #4 (permalink)  
Antiguo 25/02/2013, 02:00
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 16 años, 3 meses
Puntos: 103
Respuesta: AddEventListener me va a volver loca!

bien, la diferencia radica en lo siguiente
addEventListener requiere lo siguiente

addEventListener(«cadena»,«función»,[«dato booleano»])

«esto» es el tipo de variable que nescesita.

imaginate la siguiente función

Código Javascript:
Ver original
  1. function retornar(){
  2. return 'cadena';
  3. }

ahora, si ponemos en vez de retornar, ponemos retornar() , lo que hace es que en ves de pasar una función , la ejecuta, y devuelve el resultado, por lo cual estariamos obteniendo una «cadena» en vez de una «función»

Cita:
evento.preventDefault();
sirve para que por ejemplo, si por default, al apretar un boton de submit, el resultado se envia, esto previene que se ejecute, y hace que se ejecute solamente lo que vos pedis en tu función

un saludo !! y espero que os haya iluminado
  #5 (permalink)  
Antiguo 25/02/2013, 03:07
Avatar de juliet14  
Fecha de Ingreso: febrero-2013
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: AddEventListener me va a volver loca!

No estoy muy segura de que esa sea lo que yo necesite, ya que a lo mejor me he explicado mal...
Por otra parte quiero recalcar, que he optado ahora por utilizar window.onload con funciones anónimas, y parece que en alguna página funciona mejor, pero en mi index.php sigue sin funcionar y si estoy en una página que funcionan los eventos, y navego a otra, la nueva los eventos funcionan mal, pero si la nueva la ejecuto en un principio sin navegar hacia otra nueva, si funciona (jolin, es un lio explicarlo, espero que me entendáis).

Mis botones no son "submit", de hecho tengo un:
Código HTML:
Ver original
  1. <input type="button" id="iniciar" value="Iniciar sesion">

Y mi código ahora tiene esta pinta: (por si sirve)

Código Javascript:
Ver original
  1. function manejaGU(){
  2.         initReq("POST","profesorGestionaUsuarios.php",true);
  3.     }
  4.     function manejaGE(){
  5.         initReq("POST","profesorGestionaExamenes.php",true);
  6.     }
  7.     function manejaVE(){
  8.         initReq("POST","profesorVisualizaEstadisticas.php",true);
  9.     }
  10.  
  11.          
  12.    //por aqui mas funciones
  13.  
  14.  window.onLoad=function(){
  15.         document.getElementById('usuarios').addEventListener('click',manejaGU,false);
  16.         document.getElementById('examenes').addEventListener('click',manejaGE);
  17.         document.getElementById('estadisticas').addEventListener('click',manejaVE);
  18. } /*esto lo pongo lo ultimo antes de </script>*/

HASTA AQUI BIEN, pero en el index.php aunque es idéntico no funcionaaaa

Código Javascript:
Ver original
  1. function manejaIniciar(){
  2.         comprobar();/*función que comprueba que los [B]input text estén rellenados[/B] y redirige a initReq("POST","validarInicio.php",true);*/
  3.     }
  4.  
  5.          
  6.    //por aqui mas funciones
  7.  
  8.  window.onLoad=function(){
  9.         document.getElementById('iniciar').addEventListener('click',manejaIniciar,false);
  10. } /*esto lo pongo lo ultimo antes de </script>*/

Gracias de antemano otra vez!
  #6 (permalink)  
Antiguo 25/02/2013, 07:16
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: AddEventListener me va a volver loca!

Te pongo dos ejemplos del uso de addEventListener

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. <script type="text/javascript">
  7. //<![CDATA[
  8. function mostrar_titulo(t){
  9. alert('title="'+ t.title + '"  href=' + t.href);
  10. }
  11.  
  12. window.onload = function(){
  13. var linksmenu = [];
  14. var contiene_links = document.getElementById('menu');
  15. linksmenu = contiene_links.getElementsByTagName('a');  
  16.     for (i=0; i<linksmenu.length; i++) {
  17.         if (linksmenu[i].addEventListener){
  18.         linksmenu[i].addEventListener("mouseover", function(){mostrar_titulo(this)}, false);
  19.         }else{ // <IE9
  20.             if (linksmenu[i].attachEvent){
  21.             linksmenu[i].attachEvent ("onmouseover", function () {mostrar_titulo(this)});
  22.         }  
  23.         }
  24.     }
  25. }
  26. //]]>
  27. </head>
  28. <div id="menu">
  29. <a href="a.html" title="titulo a">a</a><br />
  30. <a href="b.html" title="titulo b">b</a><br />
  31. <a href="c.html" title="titulo c">c</a><br />
  32. </div>
  33. </body>
  34. </html>

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>Submit disabled</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  <script type="text/javascript">
  7. //<![CDATA[
  8. // Definimos los campos que se han de verificar, contruimos un array con los id de los mismos
  9. var campos = ["campo1", "campo2", "campo3", "campo4"];
  10. function activar() {
  11. var c = 0;
  12. for(var i in campos){
  13. i = parseInt(i);
  14. var cadenaL = document.getElementById(campos[i]).value;
  15. // hacemos un trim previo a la verificación
  16. cadenaL = cadenaL.replace(/^\s+/g,'').replace(/\s+$/g,'')
  17. if(cadenaL != ""){
  18. c++; // incrementamos c por cada campo que no está vacío
  19. }
  20. if(c == (i+1)){ // si c es = al total de los campos habilitamos el submit
  21. document.getElementById('envia').disabled = false;
  22. }else{
  23. document.getElementById('envia').disabled = true;
  24. }
  25. }
  26. }
  27.  
  28. // agregamos el evento onkeyup dinamicamente a los campos requeridos
  29. window.onload = function(){
  30.     for(var e in campos){
  31.     var elem = document.getElementById(campos[e])
  32.     if (elem.addEventListener){
  33.     elem.addEventListener("keyup", function(){activar()}, false);
  34.     }else{ // <IE9
  35.         if (elem.attachEvent){
  36.         elem.attachEvent ("onkeyup", function () {activar(elem)});
  37.         }
  38.     }
  39.     }
  40. }
  41.  
  42. //]]>
  43. </head>
  44. <form action="#" method="post">
  45. <input type="text" id="campo1" value="" /><br />
  46. <input type="text" id="campo2" value="" /><br />
  47. <input type="text" id="campo3" value="" /><br />
  48. <input type="text" id="campo4" value="" /><br />
  49. <input type="submit" id="envia" name="envia" value="procesar" disabled="disabled"/><br />
  50. </form>
  51. </body>
  52. </html>

Como ves, efectivamente, como los eventos se àgregan en la carga de la página, uso window.onload para identificar los elemento y agregar el evento.

Mi sugerencia primera es que reemplace tus funciones
Código:
function manejaGU(){
        initReq("POST","profesorGestionaUsuarios.php",true);
    }
    function manejaGE(){
        initReq("POST","profesorGestionaExamenes.php",true);
    }
    function manejaVE(){
        initReq("POST","profesorVisualizaEstadisticas.php",true);
    }
por

Código:
function manejaGU(){
        alert('usuarios');
    }
    function manejaGE(){
       alert('examenes');
    }
    function manejaVE(){
      alert('estadisticas');
    }
Una vez que te asegures que los eventos se agregan en cada boton para la función que le corresponde, analices como está trabajando initReq, que aparentemente está utilizando Ajax, pero a decir verdad no entiendo como es que la usas, en un principio si lo único que cambia es la url por que pasar tres variables.
Además te aclaro que si podés pasar variables con addEventListener por lo que directamente podrias invocar a initReq(url) en forma directa
Ejemplo de addEventListener con parámetro a la función
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <title>addEvent + variable</title>
  3.  
  4. td{
  5. cursor: pointer;
  6. }
  7.  
  8.  
  9. // cambiatexto de id=dos
  10. function cambiatexto(nuevotexto) {
  11.   var dos = document.getElementById("dos");
  12.   dos.firstChild.nodeValue = nuevotexto;  
  13. }
  14.  
  15. // agregar Evento a tabla
  16. function iniciarEvento() {
  17.   var el = document.getElementById("tabla");
  18.   el.addEventListener("click", function(){cambiatexto("hola")}, false); // pasas un parámetro
  19. }
  20.  
  21. </head>
  22. <body onload="iniciarEvento();">
  23.  
  24. <table id="tabla">
  25.   <tr><td id="uno">uno</td></tr>
  26.   <tr><td id="dos">dos</td></tr>
  27.  
  28. </body>
  29. </html>


SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 25/02/2013, 15:41
Avatar de juliet14  
Fecha de Ingreso: febrero-2013
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: AddEventListener me va a volver loca!

Hola gente:
Gracias a todos por vuestra ayuda y hacerme intentar comprender.
La cosa es que el código lo tengo bien según me confirmais.
Pienso que preventDefault() no lo necesito ya que utilizo button, y directamente le aplico el evento.
Mi problema es que tengo una pagina profesor.php (por ejemplo) y me funcionan los eventos, hago click a gestionar usuarios (un boton) y navego hacia profesorGestionaUsuarios.php.
Al haber pasado de la primera a la segunda, la segunda dejan de funcionar los eventos!
Y quiero entender porque!
Porque si yo ejecuto primero profesorGestionaUsuarios.php , sus eventos funcionan perfectamente. Pero si desde aqui otra vez voy a otra pagina, por ejemplo, dar de alta usuario, está ultima también dejan de funcionar sus eventos...

He intentando borrar los eventos antes de ir hacia otra página para ver si funciona, y nada...
Y lo que mas me fastidia, es mi index, que siendo solamente una linea de código en window.onload, que no cargue el evento, y si son 3 lineas como otras páginas si

Agradezco ideas... y mucho
  #8 (permalink)  
Antiguo 25/02/2013, 16:26
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: AddEventListener me va a volver loca!

No hay relación entre una cosa y la otra

http://foros.emprear.com/javascript/addevent/

tu problema debe de estar en otra parte de tu código

A propósito, que navegador está usando?

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #9 (permalink)  
Antiguo 25/02/2013, 16:53
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 9 meses
Puntos: 36
Respuesta: AddEventListener me va a volver loca!

Mira te recomiendo que te des una vuelta a la pagina de Dean Edwards, si programas javascript y no conoces a Dean Edwards es momento de que lo hagas, el implemento un metodo para agregar eventos a un objecto de una manera segura, tal vez te pueda ayudar, mejora el addEventListener, ademas de que el metodo addEventListener no esta soportado para IE:

http://dean.edwards.name/weblog/2005/10/add-event/
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #10 (permalink)  
Antiguo 25/02/2013, 18:50
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: AddEventListener me va a volver loca!

Cita:
Iniciado por Reedyseth Ver Mensaje
ademas de que el metodo addEventListener no esta soportado para IE:
Y es información también te la dió el Sr. Edwards ?

__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #11 (permalink)  
Antiguo 26/02/2013, 04:56
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 17 años
Puntos: 51
Respuesta: AddEventListener me va a volver loca!

a mi entender el problema es que cuando le das a los botones cargas las paginas vía ajax remplazando la que tienes pues bien puede ser ese el problema ten en cuenta que
window.onload funciona solo cuando cargas la pagina si lo haces por ajax no lo ejecuta porque la pagina "ya se ha cargado"

prueba añadir esto al final de la function initReq
if(typeof(window.onload) == "function") window.onload();

saludos
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #12 (permalink)  
Antiguo 26/02/2013, 14:29
Avatar de juliet14  
Fecha de Ingreso: febrero-2013
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: AddEventListener me va a volver loca!

Hola otra vez!
Uso google chrome, y a veces también firefox, pero me decanto más por el primero..
Creo que mi solución va a ser la ultima respuesta, la de lynxcraft.(Gracias)
He añadido al final de initreq (que si es ajax), antes del send, pero no funciona...
Es decir, vuelve a cargar los mismos eventos que tengo en la página, no la de la página hacia la que navego.
Pego el código de initreq:

Código Javascript:
Ver original
  1. function initReq(reqType,url,isAsynch){
  2.         //función que manda datos al servidor para validar usuario  
  3.         try{
  4.            
  5.         var main=document.getElementById("principal");
  6.  
  7.         request.open(reqType,url,isAsynch);
  8.  
  9.         request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  10.        
  11.         request.onreadystatechange=function(){
  12.               if(request.readyState==4){//y está ok
  13.                   main.innerHTML=request.responseText;
  14.               }
  15.         }  
  16.  
  17.           request.send(null);
  18.        }
  19.        catch(errv){
  20.             document.getElementById("respuesta").innerHTML= "<error>La aplicación no puede contactar con el servidor, por favor intentelo mas tarde</error>";
  21.        }
  22.       }

Gracias a todos otra vez!
  #13 (permalink)  
Antiguo 26/02/2013, 14:57
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 16 años, 3 meses
Puntos: 103
Respuesta: AddEventListener me va a volver loca!

por que no especificas request ??

no te conviene reutilizarlo, haz lo siguiente

Código Javascript:
Ver original
  1. function initReq(reqType,url,isAsynch){
  2.         //función que manda datos al servidor para validar usuario  
  3.         try{
  4.            
  5. var request = new XMLHttpRequest();
  6.         var main=document.getElementById("principal");
  7.  
  8.         request.open(reqType,url,isAsynch);
  9.  
  10.         request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  11.        
  12.         request.onreadystatechange=function(){
  13.               if(request.readyState==4){//y está ok
  14.                   main.innerHTML=request.responseText;
  15.               }
  16.         }  
  17.  
  18.           request.send(null);
  19.        }
  20.        catch(errv){
  21.             document.getElementById("respuesta").innerHTML= "<error>La aplicación no puede contactar con el servidor, por favor intentelo mas tarde</error>";
  22.        }
  23.       }
  #14 (permalink)  
Antiguo 26/02/2013, 15:05
Avatar de juliet14  
Fecha de Ingreso: febrero-2013
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: AddEventListener me va a volver loca!

Perdón, lo siento
es que request lo inicializo al principio de mi página, y se me ha pasado especificarlo:
Código Javascript:
Ver original
  1. if (window.XMLHttpRequest){
  2.             request= new XMLHttpRequest();
  3.         }
  4.         else if (window.ActiveXObject){
  5.             //IE
  6.             request=new ActiveXObject("Msxm12.XMLHTTP");
  7.             if(! request){
  8.                 //otros
  9.                 try{
  10.                      request=new ActiveXobject("Microsoft.XMLHTTP");
  11.                 }
  12.                 catch(e){
  13.                      document.getElementById("mensajeError").innerHTML= "<error>Tu navegador no soporta nuestra aplicación!</error>";
  14.                 }
  15.             }
  16.         }
  #15 (permalink)  
Antiguo 26/02/2013, 15:13
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 9 meses
Puntos: 36
Respuesta: AddEventListener me va a volver loca!

Cita:
Iniciado por emprear Ver Mensaje
Y es información también te la dió el Sr. Edwards ?

Esa informacion la dio John Resig en su libro Pro Javascript Techniques.
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #16 (permalink)  
Antiguo 26/02/2013, 15:32
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: AddEventListener me va a volver loca!

Para evitar chicanas sería bueno aclarar que Explorer no soportaba addEventListener en versiones anteriores a la 9
  #17 (permalink)  
Antiguo 26/02/2013, 15:35
Avatar de juliet14  
Fecha de Ingreso: febrero-2013
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: AddEventListener me va a volver loca!

nah, nos olvidamos de IE por ahora ;) no lo utilizo
  #18 (permalink)  
Antiguo 26/02/2013, 15:59
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 9 meses
Puntos: 36
Respuesta: AddEventListener me va a volver loca!

Cita:
Iniciado por Panino5001 Ver Mensaje
Para evitar chicanas sería bueno aclarar que Explorer no soportaba addEventListener en versiones anteriores a la 9
Si de hecho es para las versiones anteriores al 7 si mas no me equivoco.
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #19 (permalink)  
Antiguo 26/02/2013, 16:40
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 16 años, 3 meses
Puntos: 103
Respuesta: AddEventListener me va a volver loca!

Cita:
Iniciado por Reedyseth Ver Mensaje
Si de hecho es para las versiones anteriores al 7 si mas no me equivoco.
convengamos que IE6 es un dinosaurio, se recomienda tener una buena compatibilidad con IE8 y que sea navegable con IE7, pero hermano, luchar contra IE6 es imposible

un saludo
  #20 (permalink)  
Antiguo 26/02/2013, 19:06
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 9 meses
Puntos: 36
Respuesta: AddEventListener me va a volver loca!

Cita:
Iniciado por chwc Ver Mensaje
convengamos que IE6 es un dinosaurio, se recomienda tener una buena compatibilidad con IE8 y que sea navegable con IE7, pero hermano, luchar contra IE6 es imposible

un saludo

Jajajaja si, es la lucha eterna programar para un explorador y programar para IE.

juliet14 Ya quedo resuelto tu problema ??
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #21 (permalink)  
Antiguo 26/02/2013, 19:26
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: AddEventListener me va a volver loca!

Cita:
Iniciado por Reedyseth Ver Mensaje
Esa informacion la dio John Resig en su libro Pro Javascript Techniques.
Pro JavaScript™ Techniques
Copyright © 2006 by John Resig

vs
Internet Explorer 9
Lanazaniento, 14 de Marzo de 2011


Sería bueno que actualices tu bibliografía, si no tus sentencias se convierten en falsos dogmas.
Yo en particular, cuando ingreso a responder en un post que ya está iniciado, tan solo por respeto, leo con atención lo expresado por los anteriores usuarios, no estoy diciendo con esto que seas un irrespetuso, quizás solo, involuntariamente, no pusiste la debida atención. Y si en el transcurso de la lectura ,me encuentro con cosas como
Código:
        if (linksmenu[i].addEventListener){
        linksmenu[i].addEventListener("mouseover", function(){mostrar_titulo(this)}, false);
        }else{ // <IE9
            if (linksmenu[i].attachEvent){
            linksmenu[i].attachEvent ("onmouseover", function () {mostrar_titulo(this)});
        }
ver código completo

Creo que resulta evidente la indicación <IE9
Y si no se está seguro del comportamiento de dicho código, se toma el editor de texto, se copia, pega y ejecuta. Ni que hablar si hubieses verificado el ejemplo que dejé en http://foros.emprear.com/javascript/...dd_button.html

En cuanto a
Cita:
Iniciado por juliet14 Ver Mensaje
nah, nos olvidamos de IE por ahora ;) no lo utilizo
Y cuando lo utilices qué? vas a venir a reflotar el tema?
Vos planteaste literalmente AddEventListener me va a volver loca, y que ni siquiera funcionaba bien en FF y Chrome, y eso es a lo que se te responde aqui, como usarlo correctamente. La idea de el Foro no es simplemente solucionarte el problema sino dejar información a otros usuarios que puedan tener problemas similares.

A esta altura del periplo, no me extrañaría que estes usando mal Ajax, ó simplemente que hayas olvidado vaciar la cache de tus navegadores entre corrección y corrección



__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Última edición por emprear; 26/02/2013 a las 19:47
  #22 (permalink)  
Antiguo 27/02/2013, 02:38
Avatar de juliet14  
Fecha de Ingreso: febrero-2013
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: AddEventListener me va a volver loca!

Buenos días:
Sé perfectamente a que está orientado el foro, ya que como bien dije al principio, he utilizado este foro muchísimo para aprender de los errores y problemas de los demás, y fue por la razón que decidí ingresar aquí, para compartir mi problema, y si puede ser, si hay algún error que por la razón que sea NO VEO, que me lo dijeran, no que me hagan la vida más fácil...

Lo que si no entiendo, son los típicos piques entre programadores para destacar unos sobre otros... Estamos aquí para ayudarnos unos a otros y a poder ser, utilizar la experiencia de otro para bien. Hasta ahora no he querido decir nada, porque no me parecía correcto.

Por otra parte, ajax me ha funcionado bien hasta ahora (o por lo menos eso creo, seguiré tu consejo).
Y lo de utilizar IE, lo he descartado POR AHORA, porque no se cual es el porcentaje de usuarios que utilizarán IE, pero que yo sepa MUY bajo. Fue por lo que decidí ceñirme a los otros dos navegadores, y cuando funcionen, hacer para IE.

De todas formas, agradezco todas vuestras propuestas, y seguiré intentándolo.
Si lo consigo, lo confirmaré por aquí;)

saludos
  #23 (permalink)  
Antiguo 27/02/2013, 03:18
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: AddEventListener me va a volver loca!

Deberías subir a un servidor el ejemplo que te falla así podemos verlo online. Estoy de acuerdo con Emprear en que es improbable que lo que esté fallando sea addEventListener. Y no, Reedyseth, chwc: addEventListener no funcionaba en Explorer 7 y 8, así que si quieren retrocompatibilidad con esos navegadores deben proporcionar el camino alternativo con attachEvent (y detachEvent si no quieren memory leak).
  #24 (permalink)  
Antiguo 27/02/2013, 03:20
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: AddEventListener me va a volver loca!

Cita:
Iniciado por juliet14 Ver Mensaje
Buenos días:
Sé perfectamente a que está orientado el foro, ya que como bien dije al principio, he utilizado este foro muchísimo para aprender de los errores y problemas de los demás, y fue por la razón que decidí ingresar aquí, para compartir mi problema, y si puede ser, si hay algún error que por la razón que sea NO VEO, que me lo dijeran, no que me hagan la vida más fácil...

Lo que si no entiendo, son los típicos piques entre programadores para destacar unos sobre otros... Estamos aquí para ayudarnos unos a otros y a poder ser, utilizar la experiencia de otro para bien. Hasta ahora no he querido decir nada, porque no me parecía correcto.

Por otra parte, ajax me ha funcionado bien hasta ahora (o por lo menos eso creo, seguiré tu consejo).
Y lo de utilizar IE, lo he descartado POR AHORA, porque no se cual es el porcentaje de usuarios que utilizarán IE, pero que yo sepa MUY bajo. Fue por lo que decidí ceñirme a los otros dos navegadores, y cuando funcionen, hacer para IE.

De todas formas, agradezco todas vuestras propuestas, y seguiré intentándolo.
Si lo consigo, lo confirmaré por aquí;)

saludos
Mi estimada, lo que vos llamás "pica entre programadores" no es más que una forma de mejorar, si en el mundo no existiesen esas "picas", seguiríamos en las cavernas arrastrando mujeres de los pelos, y aquí, al menos de mi parte, nadie quiere destacar sobre nadie, en particular a @Reedyseth no lo conozco mucho, ya que su participación en el foro no ha sido al momento tanta, pero si conozco bastante más a la de @chwc que siempre es muy atinada y concreta, y ni que decirte la de @Panino5001, que no solo sabe muchísimo sino que en algunos temas puntuales, canvas, por ejemplo, les pasa el trapo a varios, y mi incluyo, desde ya.
Si me dijeses que entramos en deveaneos acerca de la "cuadratura del círculo", te aceptaría los reclamos, pero si seguís todo el hilo, te darás cuenta que hemos desmenuzado bastante, y con profuso código, el comportamiento de addEventListener. Dentro de ese contexto, no puedo dejar pasar la sentencia "addEventListener NO funciona en IE", que es una generalización falsa, si lo hiciese, no haría más que invitar a futuros lectores del post a que se lleven conceptos equivocados, y si me entretuve en justificarlo, no fué para ser más que nadie, es simplemente porque es así, y punto.
Por otra parte, como agregado, yo no veo que nadie haya insultado ni menospreciado a nadie.

Si algo de lo que te hemos dicho te sirve, aprovechalo, y si no te sirve o no soluciona tu problema, lo lamento.

Ah, y para tu información, date una vuelta por
http://www.w3counter.com/globalstats.php
http://gs.statcounter.com/#browser-w...201-201301-bar
que te vas a llevar algunas sorpresas (y esas son globales, si las regionalizas puede en muchos casos volcarse decididamente a IE)

__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #25 (permalink)  
Antiguo 27/02/2013, 03:48
Avatar de juliet14  
Fecha de Ingreso: febrero-2013
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: AddEventListener me va a volver loca!

Muy buenas:
Ha sido interesante ver los datos
Todos me habéis ayudado a ver y aprender ;)
Ahora estoy en el trabajo, a ver si cuando llegue a casa me pongo y os cuento.

saludos
  #26 (permalink)  
Antiguo 27/02/2013, 10:00
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 9 meses
Puntos: 36
Respuesta: AddEventListener me va a volver loca!

Que buena se puso la platica en el foro chicos, la verdad no tiene nada de malo que nos digamos los errores, bueno al cabo estamos para mejorar y aprender de ellos, si bien emprear mencionaste con mi bibliografia un poco desactualizada y si, comprare un libro mas actual, al cabo que acabo de terminar de leer este, pero bueno de aqui sacamos ya varias cosas buenas.

juliet14 por tu frustracion lo primero que quieres es que funciones en FF y Chrome, pero como dicen arriba no esta de mas una vez que lo tengas funcionando que empieces a hacer tus adaptaciones para IE, a final habra usuarios que lo usen y es cuando te vas a romper la cabeza cuando ya tengas todo terminado y lo quieras acoplar.

Y bueno la cosa es, le resolvimos la duda al chico ???


Gracias por sus comentarios constructivos !!
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #27 (permalink)  
Antiguo 27/02/2013, 14:10
Avatar de juliet14  
Fecha de Ingreso: febrero-2013
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: AddEventListener me va a volver loca!

Hola chicos:

Aqui me tenéis probando y probando:
-He borrado caché
-He probado a cargar eventos en <body onload="cargar()">
-He probado "if(typeof(window.onload) == "function") window.onload();" como dijo lynxcraft

Ya no se que mas probar, porque sigue sin funcionar...
Le doy vueltas y vueltas a la cabeza, y entiendo perfectamente el hecho de que, al cargar dentro de la página de inicio en un div, con ajax, el contenido de la página hacia la que navego no carga eventos... Pero la pregunta es, donde cito la función de carga de eventos, para que a la hora de cargar dicha página con ajax, se cargue también los dichosos eventos
  #28 (permalink)  
Antiguo 27/02/2013, 14:53
Avatar de juliet14  
Fecha de Ingreso: febrero-2013
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 2
Respuesta: AddEventListener me va a volver loca!

HOLA A TODOS:
creo que me he dado cuenta de mi error...

Estaba utilizando mal ajax, ya que haciendo trazas he visto que cargaba TODA la otra página hacia la que quiero navegar, entre todo, el head, en el que se encuentra addeventlistener, y por lo tanto no se carga...

Entonces, ahora entiendo la manera que ha dicho @emprear de crear eventos
(mil gracias!)
Código Javascript:
Ver original
  1. function redirije(t){
  2. window.location.href = 'add_button_'+t.title+'.html';
  3. }
  4.  
  5. function cargar(){
  6. var linksmenu = [];
  7. var contiene_links = document.getElementById('menu');
  8. linksmenu = contiene_links.getElementsByTagName('button');  
  9.     for (i=0; i<linksmenu.length; i++) {
  10.         if (linksmenu[i].addEventListener){
  11.         linksmenu[i].addEventListener("click", function(){redirije(this)}, false);
  12.         }else{ // <IE9
  13.             if (linksmenu[i].attachEvent){
  14.             linksmenu[i].attachEvent ("onclick", function () {redirije(this)});
  15.         }  
  16.         }
  17.     }
  18. }
  19. window.onload=cargar();
  20. </script>
  21. </head>
  22. <body>
  23. <div id="menu">
  24. <button title="1">1</button><br />
  25. <button title="2">2</button><br />
  26. <button title="3">3</button><br />

Y cuando vaya a hacer una petición xmlhttprequest (ajax), después de:
Código Javascript:
Ver original
  1. main.innetHTML=request.responseText;
  2. [B]cargar();[/B]

Esta bien asi verdad? (aun me falta programarlo bien y probarlo claro)
Si crees que si le doy a tema solucionado

gracias a todoosss
  #29 (permalink)  
Antiguo 09/03/2013, 11:33
Avatar de juliet14  
Fecha de Ingreso: febrero-2013
Mensajes: 12
Antigüedad: 11 años, 8 meses
Puntos: 2
De acuerdo Respuesta: AddEventListener me va a volver loca!

Hola a todos:
POR FIN HE CONSEGUIDO QUE FUNCIONE!
Y gracias a vosotros
En mi pagina principal he puesto:

Código Javascript:
Ver original
  1. function redirije(t){
  2.         initReq("POST",t.title+'.php',true);
  3.     }
  4.  
  5.     function cargaEventos(){
  6.     alert("Eventos cargados");
  7.     var linksmenu = [];
  8.     var contiene_links = document.getElementById('principal');
  9.         linksmenu = contiene_links.getElementsByTagName('button');  
  10.             for (i=0; i<linksmenu.length; i++) {
  11.                 if (linksmenu[i].addEventListener){
  12.                     linksmenu[i].addEventListener("click", function(){redirije(this)}, false);
  13.                 }else{ // <IE9
  14.                     if (linksmenu[i].attachEvent){
  15.                         linksmenu[i].attachEvent ("onclick", function () {redirije(this)});
  16.                     }  
  17.                 }
  18.             }
  19.     }

Por ejemplo para el boton:
Código HTML:
Ver original
  1. <td><button title="GestionaUsuarios" ....>

Y para que cada vez que navego entre páginas con AJAX, al final de cada fin de request, hago esto:

Código Javascript:
Ver original
  1. (aparte de hacer la instancia respectiva de XMlhttprequest)
  2.   function initReq(reqType,url,isAsynch){
  3.         //función que manda datos al servidor para validar usuario  
  4.         try{  
  5.  
  6.         request.open(reqType,url,isAsynch);
  7.        
  8.         request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset = UTF-8");
  9.        
  10.         request.onreadystatechange = function (){
  11.        
  12.        if(request.readyState==4 && (request.status==302 || request.status==200)){//transacción completada
  13.              document.getElementById("principal").innerHTML=request.responseText;
  14.              [COLOR="Red"][B][U]cargaEventos();[/U][/B][/COLOR]
  15.          }  
  16.        }
  17.  
  18.         request.send(null);
  19.  
  20.         }
  21.         catch(errv){
  22.             document.getElementById("respuesta").innerHTML= "<error>La aplicación no puede contactar con el servidor, por favor intentelo mas tarde</error>";
  23.         }
  24.       }


Graciaaaasss (espero que a alguien le sirva esto tanto como yo lo necesitaba!)
  #30 (permalink)  
Antiguo 09/03/2013, 11:50
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: AddEventListener me va a volver loca!

El viejo dicho "Persevera y tiunfarás". más vigente que nunca
Suerte

__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: addeventlistener, ajax, campos, funcion, php, volver
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 16:43.