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)