Foros del Web » Programando para Internet » Javascript »

Comportamiento extraño en firefox al combinar eventos

Estas en el tema de Comportamiento extraño en firefox al combinar eventos en el foro de Javascript en Foros del Web. Hola a todos! Creo que encontré un error ó al menos un comportamiento diferente en firefox 2 y 3 con respecto al evento 'mousemove'. Fijense ...
  #1 (permalink)  
Antiguo 30/10/2008, 20:28
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 4 meses
Puntos: 2
Busqueda Comportamiento extraño en firefox al combinar eventos

Hola a todos!

Creo que encontré un error ó al menos un comportamiento diferente en firefox 2 y 3 con respecto al evento 'mousemove'.


Fijense el siguiente codigo:

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<title>test</title>

	<script type='text/javascript'>

               //
               // Esto es solo la dollar function... no den bola...
               //
		function $() {
			var elements = new Array();

			for (var i = 0; i < arguments.length; i++) {
				var element = arguments[i];
				if (typeof element == 'string') {
					element = document.getElementById(element);
				}
				if (arguments.length == 1) {
					return element;
				}
				elements.push(element);
			}
			return elements;
		}

		// FLAG Booleana
		var action = false;

		function test(obj) {
			// Imprimo en el textbox 'txt' el valor de 'ACTION'
			$('txt').value = action;

			// SOLO si la variable 'action' es TRUE, imprimo en el textbox 'srcid' el ID de la DIV
			// sobre la cual estoy parado
			if (action == true) {
				$('srcid').value = obj.id;
			}
		}

	</script>


	<style type='text/css'>
		BODY {
			padding:0;
			margin:0;
			background-color: #aaaaaa;
		}

		#grid {
			width:400px;
			height:400px;
			margin:auto;
			margin-top:5%;
			background-color: #333333;
		}

		.cell {
			width:50px;
			height:50px;
			overflow:hidden;
			background-color: #ffffff;
			float:left;
			margin: 10px;
		}
	</style>

</head>
<body id='body_ref'>
	ACTION VALUE: <input type='text' value='0' id='txt' /><br/>
	DIV ID: <input type='text' value='' id='srcid' value='' /><br/>
	<hr />

	<div id='grid' onmousedown='javascript:action=true;' onmouseup='javascript:action=false;'>

		<div id='cell_1' class='cell' onmousemove='test(this);'></div>
		<div id='cell_2' class='cell' onmousemove='test(this);'></div>
		<div id='cell_3' class='cell' onmousemove='test(this);'></div>

	</div>

</body>
</html>


En IE7: Si hago click sobre una de las div blancas y sin dejar de presionar el boton del mouse me muevo hacia las otras DIVs blancas, el evento se dispara nuevamente en cada una de ellas y en el texbox 'srcid' veo que actualizado el ID de la div sobre la cual estoy parado.

En FIREFOX (2 y 3): Si hago click en una div blanca, se actualiza el textbox con su ID, pero al moverme a otras div el evento no se dispara.

PERO, si hago click dentro de la div contenedora negra y LUEGO comienzo a moverme sobre las divs blancas, el evento SI se dispara y el textbox 'txt' se actualiza bien.


Estoy intentando descubrir por qué sucede esto y no doy en el clavo... ¿alguno tiene alguna IDEA sobre cual es el problema y si hay alguna posible solución?

A mi lo unico que se me ocurre es que FIREFOX intenta 'arrastrar' el elemento, como cuando drageamos texto ó una imagen y esta funcionalidad propia del programa cliente anula la combinación de eventos javascript: onmousedown + onmousemove



Gracias por sus aportes!

un saludo

PD: Esto mismo lo probe con JQuery y luego con DOM Events echo a mano, y el comportamiento es el mismo.

Última edición por Computer XTress; 30/10/2008 a las 20:39
  #2 (permalink)  
Antiguo 02/11/2008, 20:37
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 4 meses
Puntos: 2
Respuesta: Comportamiento extraño en firefox al combinar eventos

alguna idea pls?

gracias!
  #3 (permalink)  
Antiguo 02/11/2008, 23:28
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: Comportamiento extraño en firefox al combinar eventos

Código PHP:
        function test2(e) {
            var 
e=|| window.event;
            var 
E=e.target || e.srcElement;
            
document.getElementById('txt').value action;

            if (
action == true && E.id != 'grid') {
                
document.getElementById('srcid').value E.id;
            }
        } 
Código HTML:
<div id='grid' onmousedown="javascript:action=true;" onmouseup="javascript:action=false;" onmousemove="test2(event);">

		<div id='cell_1' class='cell'></div>
		<div id='cell_2' class='cell'></div>
		<div id='cell_3' class='cell'></div>

	</div> 
No tengo idea de porque no funciona de esa manera.. no tengo años en JS...
Pero sacando el onmouseup.. anda perfecto.... ahora si.. no te setea false la variable..

Tenes varias formas de hacerlo.. podes poner un comando directamente en onmousedown.. en donde agregue los eventos por JS...

  #4 (permalink)  
Antiguo 06/11/2008, 14:48
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 4 meses
Puntos: 2
Respuesta: Comportamiento extraño en firefox al combinar eventos

Hola Fernando, gracias por tu respuesta!

Acabo de provar tu función y no me esta funcionando tampoco. Lo que si encontre recientemente en en la red es que el problema es el evento por defecto del browser "onDragStart" (o algo así, todavia sigo leyendo). Lo que indican es que hay que desligar el evento por defecto con js y luego funciona...

La forma más facil de comprobarlo es usando el cualquier otro boton del mouse que no sea el izquierdo... si hablo click con el derecho sobre una cajita y muevo hacia las otras sin "soltar", las variables se actualizan perfectamente !!

Ahora cuando termine de leer y lo soluciono posteo como lo hice por si a alguien le interesa...

Saludos y gracias !
  #5 (permalink)  
Antiguo 06/11/2008, 14:59
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 4 meses
Puntos: 2
Respuesta: Comportamiento extraño en firefox al combinar eventos

¡ SOLUCIONADO !

Efectivamente hay que cancelar el comportamiento por defecto en firefox, lo que se hace con el metodo 'preventDefault()' del evento... es decir, haciendolo de forma intrusiva como está en este ejemplo, quedaría así:

Código:
<div id='grid' onmousedown='javascript:event.preventDefault(); action=true;' onmouseup='event.preventDefault(); javascript:action=false;'>
Con dom events, cuando recibimos el objeto event hacemos un: event.preventDefault(); , osea, es lo mismo.


Espero le sirva a alguien más

Un saludo!!
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 09:27.