Foros del Web » Programando para Internet » Javascript »

addEventListener ignorar solo click en elemento??

Estas en el tema de addEventListener ignorar solo click en elemento?? en el foro de Javascript en Foros del Web. Holaa Al tema: Al dar clic en Código HTML: <img id= "tool_edit" class= "tool" src= "images/deptos_info/pub_edit.png" title= "Editar publicaci &oacute; n" onclick= "replaceDiv('publicacion<?php echo $id_pub; ...
  #1 (permalink)  
Antiguo 22/09/2012, 10:47
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
addEventListener ignorar solo click en elemento??

Holaa

Al tema:

Al dar clic en

Código HTML:
<img id="tool_edit" class="tool" src="images/deptos_info/pub_edit.png" title="Editar publicaci&oacute;n" onclick="replaceDiv('publicacion<?php echo $id_pub; ?>')" /> 
Me lanza una función que reemplaza un div por un editor, hasta aqui ok

después coloque la siguiente funcion con la intencion de que eschuce cuando el usuario de clic fuera del editor (en cualquier parte fuera del editor) y lo cierre (lanzando la funcion saveEdit que guarda el contenido del editor y lo cierra)

Código Javascript:
Ver original
  1. window.onload = function(){
  2.     if ( window.addEventListener )
  3.         document.body.addEventListener( 'click', saveEdit, false );
  4.     else if ( window.attachEvent )
  5.         document.body.attachEvent( 'onclick', saveEdit );
  6. };

la función funciona bien, el problema es que la escucha el clic en la img que es para abrir el editor y obviamente no permite hacer nada por que lo cierra.

funciona perfecto si en lugar que escuche un clic, escuche dos clic (dblclick) pero no quiero que funcione al doble clic

Como puedo hacer para que me ignore el clic en la img y escuche el clic en cualquier otro lado???
  #2 (permalink)  
Antiguo 22/09/2012, 12:00
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: addEventListener ignorar solo click en elemento??

buenas,
fíjate que el evento es "global"... es decir, no importa donde presiones, dentro o fuera del editor, el handler saveEdit se inicia. lo que puedes hacer es que en ese handler verifica en cual elemento se inicio el evento — event.target. luego en bucle recorres los elementos padres para determinar si alguno de ello representa el editor. en dicho caso, el handler no debe continuar — return. en caso contrario, donde ninguno representa el editor, procedes con el resto del código.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 24/09/2012, 08:49
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
Respuesta: addEventListener ignorar solo click en elemento??

Hola zerokilled gracias por contestar

hice algo tentativo por lo que entendi de tu explicacion, pero aun no comprendo como hago eso de recorrer los elementos padres??

esto es lo que llevo:

Código Javascript:
Ver original
  1. window.onload = function(){
  2.     if ( window.addEventListener )
  3.         document.body.addEventListener( 'click', saveEdit, false );
  4.     else if ( window.attachEvent )
  5.         document.body.attachEvent( 'onclick', saveEdit );
  6. };
  7. function saveEdit( ev ){
  8.     var element = ev.target || ev.srcElement;
  9.     element = element.parentNode;
  10.     while(¿?){
  11.         if (element==¿?){
  12.             if ( editor ){
  13.                 edit_muroSQL(editor.getData(), id_publicacion);
  14.                 editor.destroy();
  15.             }
  16.         }
  17.         else{  
  18.             return;
  19.         }
  20.     }
  21. }

gracias
  #4 (permalink)  
Antiguo 24/09/2012, 13:36
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: addEventListener ignorar solo click en elemento??

básicamente tendrías que hacer esto...
Código:
while(target && target != editorBox) target = target.parentNode;
if(target) return; // hacer nada ;
...
// hacer algo ;
en la condición del while se verifica que target sea un elemento y que dicho elemento no sea el editor. mientras esa condición se cumpla, target itera por el nodo padre hasta que se agote o hasta que coincida con el elemento que representa el editor. si los nodos padres se agotan, entonces target equivale a null. luego en la condición if se verifica si target es null o un elemento. en caso de ser un elemento, se asume que el evento ocurrio dentro del editor. por tanto, se cancela el resto del proceso (return). de lo contrario, cuando target es null, se procede hacer algo.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 24/09/2012, 13:51
Avatar de ClubIce  
Fecha de Ingreso: diciembre-2008
Mensajes: 216
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: addEventListener ignorar solo click en elemento??

no se si te sirva, pero lo que puedes hacer el que mediante una funcion, generes una div dinamicamente en la raiz del body que mediante css y javascript cubra todo el documento y al editor le pones un zindex superior para que sobre salga de esta div, entonses lo unico que tienes que haces es añadir el onclick a la div que cubre de esa forma no se cerrara al hacer click en el editor.
  #6 (permalink)  
Antiguo 25/09/2012, 08:14
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
Respuesta: addEventListener ignorar solo click en elemento??

gracias zerokilled voy a probar como me dices

gracias clubice

Etiquetas: addeventlistener, funcion, ignorar
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 19:12.