Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/10/2008, 20:28
Computer XTress
 
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