Foros del Web » Programando para Internet » Javascript »

Capturar onclick en distintos objetos

Estas en el tema de Capturar onclick en distintos objetos en el foro de Javascript en Foros del Web. Hola: Tengo una lista de elementos.Cada uno de ellos con un icono para eliminar el elemento y lo que quiero es que al hacer click ...
  #1 (permalink)  
Antiguo 12/08/2009, 17:01
 
Fecha de Ingreso: enero-2009
Mensajes: 50
Antigüedad: 15 años, 3 meses
Puntos: 0
Capturar onclick en distintos objetos

Hola:

Tengo una lista de elementos.Cada uno de ellos con un icono para eliminar el elemento y lo que quiero es que al hacer click en alguno de esos iconos me salga un mensaje de comfirmación para eliminar el elemento.

Yo siempre capturo los eventos con getElementById pero como ahora tengo muchos elementos y no les puedo poner un id a cada uno pues no sé como detectar el evento.

Gracias de antemano
  #2 (permalink)  
Antiguo 12/08/2009, 17:10
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
Puntos: 1485
Respuesta: Capturar onclick en distintos objetos

muestranos un ejemplo porque realmente no se si comprendi. te adelanto que lo mas seguro lo puedas hacer sacandole beneficio al DOM y el objeto de evento. si tienes una estructura similar para todos tus elementos con el DOM puedes referirte a ellos con la ayuda del evento. de este modo no es necesario asignarle un ID a todos tus elementos.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 13/08/2009, 01:55
 
Fecha de Ingreso: enero-2009
Mensajes: 50
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Capturar onclick en distintos objetos

A ver:


Elemento 1 --------------------------
Elemento 2 --------------------------
Elemento 3 --------------------------
Elemento 4 --------------------------
Elemento 5 --------------------------
Elemento 6 --------------------------

Yo quiero que al hacer click en cualquiera de esos iconos se llame a una función.
Entonces en mi archivo .js tendria

window.onload=function() {

//Aqui normalmente tengo cosas del tipo document.getElementById("pepe").onclick = unafuncion

Quiero saber que poner aquí para capturar el click sobre cualquiera de los iconos

}
  #4 (permalink)  
Antiguo 13/08/2009, 02:54
 
Fecha de Ingreso: abril-2008
Mensajes: 141
Antigüedad: 16 años
Puntos: 0
Respuesta: Capturar onclick en distintos objetos

Todos los elementos tienen la misma estructura o para eliminarlos tienes que utilizar diferentes formas?

Si es lo primero no hace falta ningun ID. A la funcion onclick le pasas this y vas haciendo parentNode hasta que llegues al elemento para poder eliminarlo.

Si es lo segundo, se puede hacer de muchas formas, pero la mas facil es que le pongas un ID distinto a cada icono. Por ejemplo, "icono_0", "icono_1", etc. y luego en la funcion onclick le pases como parametro el ID del icono que se haya apretado. En funcion de la ID utilizas una forma distinta de eliminar el elemento.
  #5 (permalink)  
Antiguo 13/08/2009, 03:46
 
Fecha de Ingreso: enero-2009
Mensajes: 50
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Capturar onclick en distintos objetos

A ver a mi lo que me interesa es cómo hacer para detectar los clicks en cualquiera de esos iconos.Los iconos se generan dinamicamente con php osea que no sé cuantos va a haber.Lo que no puedo hacer es tener algo así:

window.onload = function() {

document.getElementById("Elemento1").onclick = mifuncion;
document.getElementById("Elemento2").onclick = mifuncion;
document.getElementById("Elemento3").onclick = mifuncion;
document.getElementById("Elemento4").onclick = mifuncion;

...

}

Porque no sé cuantos va a haber.Por eso lo importante es que llamen a la función,lo que tienen que hacer en la función ya lo sé hacer.Por eso quiero saber algún modo de capturarlos todo,no sé si haciendo referencia a su className o a la etiqueta name...
  #6 (permalink)  
Antiguo 13/08/2009, 04:08
 
Fecha de Ingreso: abril-2008
Mensajes: 141
Antigüedad: 16 años
Puntos: 0
Respuesta: Capturar onclick en distintos objetos

Si los generas dinamicamente con php, tambien podras generar dinamicamente un numero que se vaya incrementando, no?
  #7 (permalink)  
Antiguo 13/08/2009, 04:35
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Capturar onclick en distintos objetos

Hola

Prueba con esto

Primero es meter todos los elementos en un div

Cita:
<div id="contenedor">
Elemento 1
Elemento 2
Elemento 3
Elemento 4
Elemento 5
Elemento 6
</div>
Ahora sacas todos los elementos

Código javascript:
Ver original
  1. var elem = documents.getElementById("contenedor").getElementsByTagName("IMG")

un ciclo

Código javascript:
Ver original
  1. for (var i = 0; i < elem.length; i++)
  2.  
  3. document.getElementById(elem[i]).onclick = mifuncion;

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #8 (permalink)  
Antiguo 13/08/2009, 04:36
 
Fecha de Ingreso: enero-2009
Mensajes: 50
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Capturar onclick en distintos objetos

Muchisimas gracias era lo que estaba buscando.Ya pensé que no sabía explicarme.
Voy a probarlo
  #9 (permalink)  
Antiguo 13/08/2009, 09:13
 
Fecha de Ingreso: enero-2009
Mensajes: 50
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Capturar onclick en distintos objetos

Les he puesto a las imagenes un class = img-borrar pero me da el error

Error: document.getElementById(iconosBorrar[i]) is null

¿Por qué puede ser? Todas las imagenes van dentro del div zona-titulos aunque no son hijos de este.

var iconosBorrar =
document.getElementById("zona-titulos").getElementsByClassName("img-borrar");

for (var i = 0; i < iconosBorrar.length; i++)

document.getElementById(iconosBorrar[i]).onclick = mostrarMensajeConfirmacion;
  #10 (permalink)  
Antiguo 13/08/2009, 12:26
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Capturar onclick en distintos objetos

Hola

Tal y como quieres hacerlo no vas a lograrlo nunca, ya que siempre vas a saltar ese error.

La forma más sencilla es usar el guión te mostré anteriormente. Solo tendrías que ponerle un id a cada imagen

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #11 (permalink)  
Antiguo 13/08/2009, 13:28
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
Puntos: 1485
Respuesta: Capturar onclick en distintos objetos

aqui un ejemplo sin utilizar ID's para los elementos. el ejemplo de Adler tambien funciona, solo que en su caso él/ella recorre el elemento raiz en busca de imagenes y luego asignarle el evento a cada uno de ellos. la idea que originalmente quise exponer en mi primer mensaje era asignandole el evento al elemento raiz y utilizar el objeto evento para determinar donde ocurrio la accion. funciona bien si se mantiene una estructura similar, como en el ejemplo a continuacion.
Código:
<html>
<head>
<style type="text/css">
body{
font-size:.8em;
font-family:trebuchet ms;
}
span{
cursor:pointer;
color:#33F;
text-decoration:underline;
font-size:.7em;
}
</style>

<script type="text/javascript">
onload = function(){
element("container").onclick = function(evt){
var evt = evt || event, elem = evt.target || evt.srcElement; // DOM || IE;
if(/span/i.test(elem.nodeName) && /image-remove/.test(elem.className) && element("container") == elem.parentNode.parentNode)
// en la condicion se verifica: el elemento sea un SPAN, el elemento contiene la clase "image-remove", que el padre del elemento sea hijo de la raiz;
return element("container").removeChild(elem.parentNode);
}}

function element(id){
return document.getElementById(id);
}
</script>
</head>

<body><ul id="container">
<li><p>tu contenido 1</p><span class="image-remove">Remover</span></li>
<li><p>tu contenido 2</p><span class="image-remove">Remover</span></li>
<li><p>tu contenido 3</p><span class="image-remove">Remover</span></li>
<li><p>tu contenido 4</p><span class="image-remove">Remover</span></li>
</ul></body></html>
por supuesto, en este ejemplo he utilizado un SPAN en lugar de una imagen pero no requiere grandes cambios en el script.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 13/08/2009 a las 13:36
  #12 (permalink)  
Antiguo 13/08/2009, 13:46
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Capturar onclick en distintos objetos

Como siempre, te sales colega

__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #13 (permalink)  
Antiguo 13/08/2009, 15:39
 
Fecha de Ingreso: enero-2009
Mensajes: 50
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Capturar onclick en distintos objetos

Muchas gracias por responder,tiene muy buena pinta.Mañana lo probaré
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 08:28.