Foros del Web » Programando para Internet » Javascript »

onClick con dos eventos a la vez.

Estas en el tema de onClick con dos eventos a la vez. en el foro de Javascript en Foros del Web. Buenos días, a ver si me podéis echar un cable. Tengo un código PHP que mediante onClick llama a una función javascript, ésta lo que ...
  #1 (permalink)  
Antiguo 30/03/2011, 03:47
 
Fecha de Ingreso: agosto-2009
Mensajes: 91
Antigüedad: 14 años, 8 meses
Puntos: 2
onClick con dos eventos a la vez.

Buenos días, a ver si me podéis echar un cable.

Tengo un código PHP que mediante onClick llama a una función javascript, ésta lo que hace es desplegar y esconder un listado. Inicialmente tengo una imagen con un símbolo (+) que al pulsarlo hace que se despliegue el listado. Para volverlo a esconder hago click en la misma imagen.

Lo que me gustaría es que al hacer click en (+) se desplegara el listado y en lugar de esa imagen apareciera otra imagen con un (-). Entonces al hacer click en el (-) se escondiera y volviera a aparecer el (+).

Espero haberme explicado correctamente, aquí os dejo el código:

PHP

<a href="#" onclick="cambiar('mostrar'); return false;" title="listar" class="secciono10px"><img style="vertical-align: bottom;" src="images/trans.gif" class="noticiasVerMas" alt="Ver mas" width="12px" height="12px"></a>


javascript:

function cambiar(esto)
{
vista=document.getElementById(esto).style.display;
if (vista=='none')
vista='block';
else
vista='none';

document.getElementById(esto).style.display = vista;
}

Mil gracias de antemano
  #2 (permalink)  
Antiguo 30/03/2011, 05:04
 
Fecha de Ingreso: enero-2007
Mensajes: 146
Antigüedad: 17 años, 2 meses
Puntos: 16
Respuesta: onClick con dos eventos a la vez.

Tendrías símplemente que cambiar el src de la imagen. Para ello utiliza un identificador para la imagen y luego:
Código Javascript:
Ver original
  1. document.getElementById('idimagen').src = 'images/laotraimagen.gif';
Tendrías que ponerlo en el propio if donde haces el block/none, según en el estado en el que esté pones un src u otro.
  #3 (permalink)  
Antiguo 30/03/2011, 11:43
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: onClick con dos eventos a la vez.

Optimizándolo:
Código Javascript:
Ver original
  1. function cambiar(esto){
  2.  with(document.getElementById(esto)){
  3.   switch(style.display){
  4.    case 'none':
  5.     style.display = 'block';
  6.    default:
  7.     style.display = 'none';
  8.   }
  9.  }
  10. }
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #4 (permalink)  
Antiguo 30/03/2011, 13:56
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: onClick con dos eventos a la vez.

_cronos2, siento no estar de acuerdo contigo. en realidad usar el constructor conlleva mas tiempo en la ejecución ya que cada variable dentro del bloque necesita ser comprobada para saber si es una propiedad o no del objeto del que "with" hace referencia

<offtopic>nuevo avatar, qué es??</offtopic>
  #5 (permalink)  
Antiguo 30/03/2011, 14:53
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: onClick con dos eventos a la vez.

Me imaginaba que lo de with era algo más lento pero lo acabo de constatar XD
<offtopic>Es un trollface, es un personaje un poco canalla. Lo puse porque me hizo mucha gracia lo de imitar la e de IE </offtopic>
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #6 (permalink)  
Antiguo 31/03/2011, 01:03
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: onClick con dos eventos a la vez.

que tal gente!

creo que habra que hacer otro tema porque me parece que lo terminaremos cambiando el tema inicial. @isabelm, ¿puedes abundar un poco mas en lo que mencionas acerca de with? es que tengo una opinion diferente pero antes quiero estar seguro si entendi tu idea.

offtopic del offtopic de los offtopic
ya iba a comentar algo acerca del avatar pero supuse que era un troll al ver el aro y el color de iexplorer.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 31/03/2011, 02:56
 
Fecha de Ingreso: agosto-2009
Mensajes: 91
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: onClick con dos eventos a la vez.

Buenos días y gracias a todos por vuestras respuestas.

He intentado lo que comentan los compañeros pero continúo sin conseguirlo, he buscado información y creo que puede hacerse con un cambio de las clases que contienen cada imagen con onclick. Es decir:


<a href="#" onclick="cambiar('mostrar'); return false;" title="listar" class="secciono10px"><img style="vertical-align: bottom;" src="images/trans.gif" class="noticiasVerMas" onclick="this.className='noticiasVerMenos'; return false;" alt="Ver mas" width="12px" height="12px"></a>

De esta forma consigo que al clickar y desplegar la información pase de mostrar el símbolo (+) y muestre el símbolo (-). Lo malo es que cuando vuelvo a pulsar para esconder la información el símbolo (-) no cambia a símbolo (+) de nuevo.

Una vez lo solucione ya me centraré en optimizar el código :)

Última edición por jurassicboy; 31/03/2011 a las 03:06
  #8 (permalink)  
Antiguo 31/03/2011, 03:07
 
Fecha de Ingreso: enero-2007
Mensajes: 146
Antigüedad: 17 años, 2 meses
Puntos: 16
Respuesta: onClick con dos eventos a la vez.

El tema es que no tienes puesta ninguna ID a la imagen para identificarla. Para que funcione el código que has puesto deberías modificar la función cambiar y dejarlo algo así (reutilizando tu código):
Código Javascript:
Ver original
  1. function cambiar(esto)
  2. {
  3. vista=document.getElementById(esto).style.display;
  4. if (vista=='none') {
  5. vista='block';
  6. clase = 'noticiasVerMenos';
  7. } else {
  8. vista='none';
  9. clase = 'noticiasVerMas';
  10. }
  11.  
  12. document.getElementById(esto).style.display = vista;
  13. document.getElementById('imgVer').className = clase;
  14. }
Código HTML:
Ver original
  1. <a href="#" onclick="cambiar('mostrar'); return false;" title="listar" class="secciono10px"><img id="imgVer" style="vertical-align: bottom;" src="images/trans.gif" class="noticiasVerMas" onclick="this.className='noticiasVerMenos'; return false;" alt="Ver mas" width="12px" height="12px"></a>
Aunque sigo pensando que te sería más fácil en vez de tener que crear una clase para cada estado, cambiar directamente el src de la imagen del mismo modo:
Código Javascript:
Ver original
  1. function cambiar(esto)
  2. {
  3. vista=document.getElementById(esto).style.display;
  4. if (vista=='none') {
  5. vista='block';
  6. img = 'vermenos.gif';
  7. } else {
  8. vista='none';
  9. img = 'vermas.gif';
  10. }
  11.  
  12. document.getElementById(esto).style.display = vista;
  13. document.getElementById('imgVer').src = 'images/'+img;
  14. }
Código HTML:
Ver original
  1. <a href="#" onclick="cambiar('mostrar'); return false;" title="listar" class="secciono10px"><img id="imgVer" style="vertical-align: bottom;" src="images/trans.gif" alt="" width="12px" height="12px"></a>
Menos engorroso :)
  #9 (permalink)  
Antiguo 31/03/2011, 03:35
 
Fecha de Ingreso: agosto-2009
Mensajes: 91
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: onClick con dos eventos a la vez.

Buenas de nuevo, quien diría que algo que parece tan sencillo se convertiría en algo tan tedioso!

La segunda manera, la menos engorrosa no funciona, no cambia la imagen. La primera sí la cambia pero se queda el símbolo (-) cogido, es decir, el segundo onclick no funciona.

Continúo mirando a ver si encuentro el error.
¡Que locura!
  #10 (permalink)  
Antiguo 31/03/2011, 03:41
 
Fecha de Ingreso: enero-2007
Mensajes: 146
Antigüedad: 17 años, 2 meses
Puntos: 16
Respuesta: onClick con dos eventos a la vez.

La segunda debería funcionar igualmente (al menos la idea) salvo que la ruta de las imágenes esté mal. Siempre puedes depurar con alerts poniendo por ejemplo: alert('images/'+img); a ver si cada vez que le das te muestra un resultado distinto.
  #11 (permalink)  
Antiguo 31/03/2011, 03:52
 
Fecha de Ingreso: agosto-2009
Mensajes: 91
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: onClick con dos eventos a la vez.

Si, comprobé la ruta de las imágenes, al tener el archivo .js dentro del directorio images/, es decir en images/desplegable.js dejé esta línea así:

document.getElementById('imgVer').src = img;

Pero nada, muestra imagen en blanco. Con la primera manera al menos muestra el primer click correctamente. umm..
  #12 (permalink)  
Antiguo 31/03/2011, 04:03
 
Fecha de Ingreso: enero-2007
Mensajes: 146
Antigüedad: 17 años, 2 meses
Puntos: 16
Respuesta: onClick con dos eventos a la vez.

Pues ahí tienes el error. El JS toma como ruta donde se esté ejecutando. Si tu en index.html llamas a images/desplegable.js, las funciones tomarán la ruta de index.html. Prueba y nos dices ;)
  #13 (permalink)  
Antiguo 31/03/2011, 04:57
 
Fecha de Ingreso: agosto-2009
Mensajes: 91
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: onClick con dos eventos a la vez.

Finalmente lo he podido solucionar gracias a vuestra ayuda, ahí va por si a alguien le interesa hacer algo parecido:

Función javascript:

Código Javascript:
Ver original
  1. function cambiar(esto)
  2.       {
  3.       vista=document.getElementById(esto).style.display;
  4.       if (vista=='none') {
  5.       vista='block';
  6.       img = 'images/simbolomenos.jpg';
  7.       titulo = 'Ocultar';
  8.       } else {
  9.       vista='none';
  10.       img = 'images/simbolmas.jpg';
  11.       titulo = 'Mostrar todos';
  12.       }
  13.       document.getElementById(esto).style.display = vista;
  14.       document.getElementById('imgVer').src = img;
  15.       document.getElementById('imgVer').title = titulo;
  16.      
  17.       }


PHP:

Código PHP:
Ver original
  1. <a href="#" onclick="cambiar('mostrar'); return false;" title="Mostrar todos" class="secciono10px"><img id="imgVer" style="vertical-align: bottom;" src="images/trans.gif" class="noticiasVerMas" alt="" width="12px" height="12px"></a>





Muchísimas gracias a todos por vuestra ayuda!!

Por cierto, si quisieran hacerse dos listados desplegables ¿es posible utilizar la misma función pero doblando la información?
  #14 (permalink)  
Antiguo 31/03/2011, 05:02
 
Fecha de Ingreso: enero-2007
Mensajes: 146
Antigüedad: 17 años, 2 meses
Puntos: 16
Respuesta: onClick con dos eventos a la vez.

Ves? cosa de las rutas jeje De todos modos para ver éste tipo de errores ayuda mucho el Firebug y el Web Developer, que pese a que no te muestran la imagen (por estar mal la ruta) te hubieran mostrado o bien el error o bien que se está haciendo el cambio de src, aunque fuera a una ruta incorrecta

Se puede hacer con dos desplegables indicando por ejemplo por parámetro la id de la imagen que quieres cambiar, pero si empiezas a enrevesarlo te recomiendo jquery con sus eventos, métodos y selectores bastante cómodos para éste tipo de tareas (y que simplifican infinitamente todo).
  #15 (permalink)  
Antiguo 31/03/2011, 05:14
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: onClick con dos eventos a la vez.

Cita:
Iniciado por zerokilled Ver Mensaje
que tal gente!

creo que habra que hacer otro tema porque me parece que lo terminaremos cambiando el tema inicial. @isabelm, ¿puedes abundar un poco mas en lo que mencionas acerca de with? es que tengo una opinion diferente pero antes quiero estar seguro si entendi tu idea.

offtopic del offtopic de los offtopic
ya iba a comentar algo acerca del avatar pero supuse que era un troll al ver el aro y el color de iexplorer.

me ha constado bastante encontrar el articulo sobre el que se basaba mi respuesta, ya que hace mucho que lo leí
  #16 (permalink)  
Antiguo 31/03/2011, 18:09
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: onClick con dos eventos a la vez.

gracias por el enlace isabel! en fin, la opinion que tenia no demuestra lo contrario a tu comentario. ademas de que creo que me estaba llendo por otro lado.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: eventos, onclick
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 05:19.