Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/11/2013, 12:47
Avatar de juanito1712
juanito1712
 
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 14 años, 7 meses
Puntos: 66
mouse up no funciona correctamente

pongo todo el codigo por si acaso espero que no os austeis, bajo la explicación

Código:
var ordenable = {
	bindClass : 'ordename', 
	install : function() {
		ordenable.addEvent(window, 'load', ordenable.init);
	},
	
	addEvent : function(el, evnt, func) {
		if(el.addEventListener) {
			el.addEventListener(evnt, func, false);
		} else if(el.attachEvent) {
			el.attachEvent('on'+evnt, func);
		}
	},
	
	init : function() {
		var matchClass = new RegExp('(^|\\s)('+ordenable.bindClass+')\\s*(\\{[^}]*\\})?', 'i');
		var e = document.getElementsByTagName('ul');
		for(var i=0; i<e.length; i+=1) {
			if(!e[i].orden && e[i].className && (m = e[i].className.match(matchClass))) {
				if(m[3]) {
					try {
						prop = (new Function ('return (' + m[3] + ')'))();
					} catch(eInvalidProp) {}
				}
				e[i].orden = new ordenable.orden(e[i]);
			}
		}
		
	},
	orden : function(target){
		
		var objetivo=target;
		var elementos=objetivo.getElementsByTagName('li');
		var from=null;
		var to=null;
		var active=false;
		var comodin=null;
		document.onmouseup=function(){active=false;document.body.style.cursor = 'auto';};
		target.onselectstart = function(){return false;}; 
		for(var x=0;x<elementos.length;x++){
			elementos[x].setAttribute('factor', x);
			elementos[x].onmousedown=function (){
				from=event.target||event.srcElement;
				active=true;
				document.body.style.cursor = 'move';
				return false;
			};
			elementos[x].onmouseup=function(){active=false;document.body.style.cursor = 'auto';};
			elementos[x].onmouseover=function (){
				to=event.target||event.srcElement;
				if(active==true){
					if(from.attributes.factor.value>to.attributes.factor.value){
						target.insertBefore(from, to);
						
					}else{
						target.insertBefore(from, to.nextSibling);
						
					}
					elementos=objetivo.getElementsByTagName('li');
					for(var x=0;x<elementos.length;x++){
						elementos[x].setAttribute('factor', x);
					}
				}
				
			};
		}
		
		
	}
}
ordenable.install();
la pega la tengo en esta linea
Cita:
document.onmouseup=function(){active=false;documen t.body.style.cursor = 'auto';};
el cursor lo cambia correctamente y si meto un alert, salta allá donde suelte el ratón pero la variable active parece que no se queda en false cuando suelto el ratón fuera de la lista.

y tengo 3 listas distintas en la misma página que se ven afectadas por este componente, que no se si será que al hacer el mouseout, el navevador no determina bien de que objeto es el mouse out


para probarlo, simplemente llamais al archivo.js y en una lista ul le poneis de clasname "ordename" todas las listas con ese classname que se encuentren se harán ordenables

(los espacios varios y guarradas por el estilo son cosas del foro, que en verdad el codigo no contiene errores de sintaxis)