Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Simplificar evento sintaxis

Estas en el tema de Simplificar evento sintaxis en el foro de Frameworks JS en Foros del Web. Buenas gente. Recién estoy arrancando con javascript y necesito saber si hay alguna manera de simplificar esto: Código HTML: $("#play1").click(function() { $('#reproductor1').css('display', 'inline'); $('#reproductor2').css('display', 'none'); ...
  #1 (permalink)  
Antiguo 22/06/2012, 06:50
DmD
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires, Argentina
Mensajes: 73
Antigüedad: 15 años, 7 meses
Puntos: 1
Simplificar evento sintaxis

Buenas gente.
Recién estoy arrancando con javascript y necesito saber si hay alguna manera de simplificar esto:

Código HTML:
$("#play1").click(function() 
		{
			$('#reproductor1').css('display', 'inline');
			$('#reproductor2').css('display', 'none');
			$('#reproductor3').css('display', 'none');
			$('#reproductor4').css('display', 'none');
			$('#reproductor5').css('display', 'none');
			$('#reproductor6').css('display', 'none');
			$('#reproductor7').css('display', 'none');
			$('#reproductor8').css('display', 'none');
			$('#reproductor9').css('display', 'none');
			$('#reproductor10').css('display', 'none');
			$('#reproductor11').css('display', 'none');
			$('#reproductor12').css('display', 'none');
		})
Lo que hago es cuando apreta el boton play1 de <a id="play1">Play</a> muestro el reproductor 1, y así con 12 reproductores. Se me hace un choclazo de código y me parece que debe haber alguna manera mas simple, no??.

Gracias!.
Daniela.
  #2 (permalink)  
Antiguo 22/06/2012, 13:49
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Simplificar evento sintaxis

Buenas,

Esta es una posible solución:

Código Javascript:
Ver original
  1. function showOrHide(indice) {
  2.     return function(){    
  3.     for(j = 1;j<=3;j++){
  4.         if (indice!= j){
  5.             $("#reproductor"+j).hide();
  6.         }
  7.         else $("#reproductor"+j).show();
  8.     }
  9. }
  10. }
  11.  
  12.         $(document).ready(function(){
  13. for(i = 1;i<=3;i++){    
  14.   $("#play"+i).click(showOrHide(i));
  15. }
  16. });

Otra solución sería ocultar únicamente el elemento que este visible y mostrar el que te interesa. Para ello, deberías guardar una referencia al elemento que está visible o ponerle una clase común a todos los reproductores y buscar el reproductor visible a través de un selector de clase con JQuery.

Saludos.
  #3 (permalink)  
Antiguo 22/06/2012, 14:04
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: Simplificar evento sintaxis

Lo siento por ser tan pesado, pero es que se me ocurre una forma más rápida usando el pseudoselector not en una sola línea

$("div[id^=reproductor]:not([id=reproductor1])").css("display","none");

y por tanto

$("div[id^=reproductor]:not([id=reproductor"+var+"])").css("display","none");

donde var será el número que ocultas...

y el .css("display","none") también se puede simplificar en hide()

$("div[id^=reproductor]:not([id=reproductor"+var+"])").hide();

Ahora bien, creo que ya no puedo simplificarlo más.

__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor
  #4 (permalink)  
Antiguo 25/06/2012, 09:10
DmD
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires, Argentina
Mensajes: 73
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Simplificar evento sintaxis

Muchas gracias a los 2!!!, pude adaptar las soluciones que me dieron y simplificarlo!.

Etiquetas: evento, javascript, sintaxis
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 07:58.