Ver Mensaje Individual
  #5 (permalink)  
Antiguo 23/11/2007, 06:20
sanmi69
 
Fecha de Ingreso: septiembre-2004
Mensajes: 191
Antigüedad: 19 años, 8 meses
Puntos: 1
Re: Ordenar Options de Select

Cita:
Iniciado por derkenuke Ver Mensaje
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(optionAoptionB) {
        var 
indiceDeB optionB.index;
        
elSel.optionsoptionA.index ] = new Option(optionB.textoptionB.value);
        
elSel.optionsindiceDeB ] = new Option(optionA.textoptionA.value);
        
elSel.optionsindiceDeB ].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,optionAoptionB) {
        
objCombo.optionsoptionA.index ] = new Option(optionB.textoptionB.value);
        
objCombo.optionsoptionB.index ] = new Option(optionA.textoptionA.value);
}

/**
 * fSubirOption
 * Sube una posicion los elementos seleccionados
 */

function fSubirOption(objCombo){
    var 
opciones objCombo.options;
    var 
opcionesSeleccionadas = [];
    for(var 
i=0l=opciones.lengthi<li++) {
        if( 
opciones[i].selected )
            
opcionesSeleccionadas.pushopciones[i] );
    }
    var 
hayAnterior=true;
    for(var 
i=0l=opcionesSeleccionadas.lengthi<&& hayAnteriori++) {
        
// sustituimos cada opcion por la anterior
        
var indexSelopcionesSeleccionadas[i].index;
        
hayAnterior indexSel 0;
        if( 
hayAnterior ) {
            var 
elAnterior objCombo.optionsopcionesSeleccionadas[i].index ];
            
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-1l=0i>=li--) {
        if( 
opciones[i].selected )
            
opcionesSeleccionadas.pushopciones[i] );
    }
    var 
hayPosterior=true;
    for(var 
i=0l=opcionesSeleccionadas.lengthi<&& hayPosteriori++) {
        
// sustituimos cada opcion por la anterior
        
var indexSelopcionesSeleccionadas[i].index;
        
hayPosterior indexSel opciones.length-1;
        if( 
hayPosterior ) {
            var 
elPosterior objCombo.optionsopcionesSeleccionadas[i].index ];
            
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