Foros del Web » Programando para Internet » Jquery »

Jquery y evento toggle()

Estas en el tema de Jquery y evento toggle() en el foro de Jquery en Foros del Web. buenas, De antemano gracias por su tiempo. Estoy en busqueda de un FRAMEWORK en javascript que me permita mejorar mis aplicaciones y paginas de internet ...
  #1 (permalink)  
Antiguo 14/09/2008, 22:31
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 16 años, 9 meses
Puntos: 24
Jquery y evento toggle()

buenas,

De antemano gracias por su tiempo.
Estoy en busqueda de un FRAMEWORK en javascript que me permita mejorar mis aplicaciones y paginas de internet de cara al usuario.

He revisado un poco el prototype, el mootools y el jquery.
Creo que de los tres probaré en primer lugar con el jquery pues he visto algunos ejemplos y comentarios y francamente, me está empezando a gustar demasiado.

He visto este evento: toggle()
y tengo la siguiente duda:

Según entiendo, mediante este evento, cuando hago clik la primera vez sobre un objeto puedo ejecutar una función y cuando hago click sobre el mismo objeto la segunda vez ejecuta otra funcion

Puedo mediante este mismo evento, que en lugar de esperar un clic sea necesario un evento onmouseover, me explico:

que cuando paso el raton por un obeto la rpimera vez, me ejecute una funcion, y cuando lo pase nuevamente por el mismo objeto, me ejecute otra funcion?

Muchas gracias.
__________________
SEO en Medellin
  #2 (permalink)  
Antiguo 15/09/2008, 01:51
Avatar de marcopoloaz06  
Fecha de Ingreso: julio-2007
Ubicación: México
Mensajes: 457
Antigüedad: 12 años, 6 meses
Puntos: 11
Respuesta: Jquery y evento toggle()

Hola,
ps si se
puede, usando
sus mismos recursos
aquí hice la función sencilla
le puse casi igual toggleEvent
Código HTML:
$.fn.toggleEvent = function( e ){
    var fnc = "";
    for(var i=1;i<arguments.length;i++){
        if( i==1 )fnc += "arguments["+ i +"]";
        else fnc += ", arguments["+ i +"]";
    }
    eval( "$(this).toggle( "+ fnc +" );" );
    $(this).bind(e, function(){
        $(this).trigger('click');
    });
};
y la puedes usar asi:
Código HTML:
    $("#DIV").toggleEvent("mouseover",
            function(){
                alert("1");
            },function(){
                alert("2");
            },function(){
                alert("3");
            },function(){
                alert("4");
            }
    );
ahi te dejo un ejemplo
http://polopolomp.6te.net/toggleEvent.html

saludos
:]
__________________
Aerolíneas Alicia :D
  #3 (permalink)  
Antiguo 15/09/2008, 05:06
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Jquery y evento toggle()

marcopoloaz06, le veo un par de problemas a tu solución. Una es lo de usar eval, que sería muy conveniente evitarlo. La otra -más grave- es que con eso, además haces saltar el evento click. Así que si hubiéramos asociado una función al evento click, esta saltaría con sólo hacer mouseover.

Personalmente no tengo del todo claro por qué mafima quiere hacer eso, o quizá no veo claro qué es exactamente lo que quiere hacer. De todos modos, si simplemente se trata de duplicar toggle para que salte en onmouseover, creo que sería mejor tomar directamente el código de toggle de los fuentes de jQuery y usar eso como base. Yo desde luego no creo que pueda hacer por mi propia cuenta un código tan bueno como este:

Código:
$.fn.toggleOver = function( fn ) {
	var args = arguments, i = 1;
	while( i < args.length )
		jQuery.event.proxy( fn, args[i++] );

	return this.mouseover( jQuery.event.proxy( fn, function(event) {
		this.lastToggle = ( this.lastToggle || 0 ) % i;
		event.preventDefault();
		return args[ this.lastToggle++ ].apply( this, arguments ) || false;
	}));
}
Y se usaría igual que se usa el toggle original:
Código:
$(document).ready(function(){

    $("#DIV").toggleOver(
            function(){
                alert("1");
            },function(){
                alert("2");
            },function(){
                alert("3");
            },function(){
                alert("4");
            }
    );
    // Añadimos este para que se vea que no interfiere con el evento click
    $("#DIV").click(function(){alert("hola");});
});
  #4 (permalink)  
Antiguo 15/09/2008, 11:28
Avatar de marcopoloaz06  
Fecha de Ingreso: julio-2007
Ubicación: México
Mensajes: 457
Antigüedad: 12 años, 6 meses
Puntos: 11
Respuesta: Jquery y evento toggle()

hola,
de nuevo
ps viéndolo así,
yo todavía sigo con
mi funcion toggleEvent
nada mas que mejorada para
que funcione con cualquier evento
Código HTML:
$.fn.toggleEvent = function( e, fn ) {
	var args = arguments, i = 2;
	while( i < args.length )
		jQuery.event.proxy( fn, args[i++] );
    
	return this[e]( jQuery.event.proxy( fn, function(event) {
		this.lastToggle = ( this.lastToggle || 1 ) % i == 0 ? 1 : ( this.lastToggle || 1 ) % i;
		event.preventDefault();
		return args[ this.lastToggle++ ].apply( this, arguments ) || false;
	}));
};
ejemplo:
Código HTML:
    $("html").toggleEvent("keydown",
            function(){
                alert("1");
            },function(){
                alert("2");
            },function(){
                alert("3");
            },function(){
                alert("4");
            },function(){
                alert("5");
            }
    );
PD. Ya no hace onclick ni tampoco tiene eval
camarax
;]
__________________
Aerolíneas Alicia :D
  #5 (permalink)  
Antiguo 15/09/2008, 12:25
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 16 años, 9 meses
Puntos: 24
Respuesta: Jquery y evento toggle()

Muchas gracias, ambas soluciones me van, son aplicables.

venkman, basicamente lo que quiero evaluar es la versatibilidad de jquery para adaptarlo anuestras encesidades.

Aunque se que al usar jquery puedo usar cjavascript "tradicional".

Si hay dos soluciones ya ambas tan sencillas probablemente demuestra lo versatil que es.

De nuevo, muchas gracias
__________________
SEO en Medellin
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:06.