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

Optimizando código con fors y OOP

Estas en el tema de Optimizando código con fors y OOP en el foro de Frameworks JS en Foros del Web. ¡Buenas a todos! Veamos, estoy haciendo un registro de usuarios en el que pongo, a cada atributo, una imagen para editar a éste. Simplificando el ...
  #1 (permalink)  
Antiguo 18/01/2012, 13:19
 
Fecha de Ingreso: mayo-2008
Mensajes: 103
Antigüedad: 16 años, 6 meses
Puntos: 14
Optimizando código con fors y OOP

¡Buenas a todos!

Veamos, estoy haciendo un registro de usuarios en el que pongo, a cada atributo, una imagen para editar a éste.

Simplificando el tema;

Código PHP:
<div class="atributoTexto" id="nombre">
 
NombreUsuario
</div>
<
div class="disparadorEdicion" id="disparadorNombre">
</
div
Script Javascript (con Jquery);

Código PHP:
$('#disparadorNombre').click (function () {
//codigo
}); 

Hasta aquí todo bien. El problema es que tengo como 10 atributos y escribir todo el código Javascript para cada uno, es FEO.

Estaba intentando hacer esto con un bucle, pero veo que no funciona;

Código PHP:
var disparadorA = $('#disparadorA');
var 
disparadorB = $('#disparadorB');
var 
disparadorC = $('#disparadorC');

var 
disparadores = new Array (disparadorAdisparadorBdisparadorC);

for (var 
i=0i<disparadores.lengthi++){
    
disparadores[i].click (function () {
        
alert(disparadores[i].css("background-position"));
    });

Lo del CSS es un ejemplo, el tema es que no funciona.

Estuve investigando un poquito y parece que con Javacript orientado a objetos se podría hacer, pero me resulta confuso.

¿Cómo podría hacer esto con un bucle? Y ¿alguien sabe de un tutorial de Javascript OOP que ataque este tipo de asuntos?

Gracias!
  #2 (permalink)  
Antiguo 18/01/2012, 14:08
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Respuesta: Optimizando código con fors y OOP

Si todos siguen la misma estructura puedes hacer esto:
Código Javascript:
Ver original
  1. var nombres = ['A', 'B', 'C'];
  2. $( nombres.map(function(id){ return '#disparador' + id; }).join() ).click(func);
Y dentro de func usas $(this) para hacer referencia al elemento.
Pero yo creo que es más sencillo asignarle una clase a todos los elementos, y hacer algo como $('.clase')
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
  #3 (permalink)  
Antiguo 26/01/2012, 11:07
 
Fecha de Ingreso: mayo-2008
Mensajes: 103
Antigüedad: 16 años, 6 meses
Puntos: 14
Respuesta: Optimizando código con fors y OOP

No sabía que se podía utilizar JQuery para algo así. Me ha ido genial, ahorrando como unas 50 lineas de código.

Explico un poco por si a alguien le sirve;
Hay una página con inputs, y cada Input tiene una imagen de cuatro partes;
Parte superior Izquierda muestra boton sin pulsar, y sin estar encima.
Parte superior Derecha muestra botón sin pulsar, pero estando encima.
Parte inferior Izquierda muestra botón pulsado, sin estar encima.
Parte inferior Derecha muestra botón pulsado, al pasar por encima.

A mí me ha quedado esto:

Código PHP:
        var disparadores = $('.atributoDisparador');
        
//Evento Mouseenter        
        
disparadores.mouseenter (function () {
            if( ($(
this).backgroundPosition()=="left top") || ($(this).backgroundPosition()=="right top") ){        //Top
                //Si está en Top, el efecto hover muestra top right
                
$(this).css("background-position","top right");
            } else if( ($(
this).backgroundPosition()=="left bottom") || ($(this).backgroundPosition()=="right bottom") ){        //Bottom
                //Si está en Bottom, el efecto hover muestra bottom right
                
$(this).css("background-position","bottom right");
            }
        });        
        
//Evento Mouseleave        
        
disparadores.mouseleave(function () {
            if( ($(
this).backgroundPosition()=="left top") || ($(this).backgroundPosition()=="right top") ){        //Top
                //Si está en Top, el efecto hover muestra top left
                
$(this).css("background-position","top left");
            } else if( ($(
this).backgroundPosition()=="left bottom") || ($(this).backgroundPosition()=="right bottom") ){        //Bottom
                //Si está en Bottom, el efecto hover muestra bottom left
                
$(this).css("background-position","bottom left");
            }
        }); 
Es importante considerar que uso una función especial para sacar el background-position:

Código PHP:
jQuery.fn.backgroundPosition = function() {
    var 
= $(this).css('background-position');
    
//IE
    
if(typeof(p) === 'undefined'){
        return $(
this).css('background-position-x') + ' ' + $(this).css('background-position-y');
    }else{
    
//Otros
        
if (== "0% 0%"){
            return 
"left top";
        } else if (
== "100% 0%"){
            return 
"right top";
        } else if (
== "0% 100%"){
            return 
"left bottom";
        } else if (
== "100% 100%"){
            return 
"right bottom";
        }
    }
  }; 
La modifiqué de la página http://dextrose.be/2008/11/10/jquery...ernet-explorer.
Es útil porque la función ofrecida por jQuery no es compatible con Explorer.



Ahora tengo una duda, a ver si alguien me puede echar un cable:
Al hacer click a la imagen-disparador, antes tenía puesto que hiciera un "Bind" al input relacionado, para que hiciera una lectura de "Enter", para hacer un submit artificial.

El problema es que al simplificar las cosas con esto, no sé qué input le toca.

¿Cómo podría hacerlo para que, al hacer click al disparador, se hiciera un bind al input relacionado?

Etiquetas: funcion, oop
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 14:15.