Cita:
Iniciado por derkenuke
Hola de nuevo:
Me he dado cuenta que si no se mantiene seleccionada la option (u options) se pierde el rastro de lo que hemos movido o no. Puedes cambia la función
cambiarDePosicionOption() por lo siguiente para que se vea mejor:
Código PHP:
function cambiarPosicionOption(optionA, optionB) {
var indiceDeB = optionB.index;
elSel.options[ optionA.index ] = new Option(optionB.text, optionB.value);
elSel.options[ indiceDeB ] = new Option(optionA.text, optionA.value);
elSel.options[ indiceDeB ].selected = true;
}
Un saludo.
si, modifique el script para que se mantubiera marcado.
Ademas tb pasaba q si tenias seleccionada 2 opciones y llegabas al tope de arriba con la primera, la segunda podia seguir subiendo.
Aparte el metodo de cambiar posicion lo que sacado del metodo que sube/baja, ya que asi no duplico codigo
Asik cuelgo mis metodos modificados para el que le valgan:
Código PHP:
/**
* fCambiarPosicionOption
* sustituir opcionA por opcionB (IE no deja directamente)
*/
function fCambiarPosicionOption(objCombo,optionA, optionB) {
objCombo.options[ optionA.index ] = new Option(optionB.text, optionB.value);
objCombo.options[ optionB.index ] = new Option(optionA.text, optionA.value);
}
/**
* fSubirOption
* Sube una posicion los elementos seleccionados
*/
function fSubirOption(objCombo){
var opciones = objCombo.options;
var opcionesSeleccionadas = [];
for(var i=0, l=opciones.length; i<l; i++) {
if( opciones[i].selected )
opcionesSeleccionadas.push( opciones[i] );
}
var hayAnterior=true;
for(var i=0, l=opcionesSeleccionadas.length; i<l && hayAnterior; i++) {
// sustituimos cada opcion por la anterior
var indexSel= opcionesSeleccionadas[i].index;
hayAnterior = indexSel > 0;
if( hayAnterior ) {
var elAnterior = objCombo.options[ opcionesSeleccionadas[i].index - 1 ];
fCambiarPosicionOption(objCombo,opcionesSeleccionadas[i], elAnterior);
objCombo.options[indexSel-1].selected=true;
}
}
}
/**
* fBajarOption
* Baja una posicion los elementos seleccionados
*/
function fBajarOption(objCombo){
var opciones = objCombo.options;
var opcionesSeleccionadas = [];
for(var i=opciones.length-1, l=0; i>=l; i--) {
if( opciones[i].selected )
opcionesSeleccionadas.push( opciones[i] );
}
var hayPosterior=true;
for(var i=0, l=opcionesSeleccionadas.length; i<l && hayPosterior; i++) {
// sustituimos cada opcion por la anterior
var indexSel= opcionesSeleccionadas[i].index;
hayPosterior = indexSel < opciones.length-1;
if( hayPosterior ) {
var elPosterior = objCombo.options[ opcionesSeleccionadas[i].index + 1 ];
fCambiarPosicionOption(objCombo,opcionesSeleccionadas[i], elPosterior);
objCombo.options[indexSel+1].selected=true;
}
}
}
ademas es mas logico seleccionar lo que antes estaba selecionado en le metodo de subir/bajar, que e el de cambiar posicion, yauw e asi el metodo de cambiar posicion es reutilizable para cuando lo necesitemos