Foros del Web » Programando para Internet » Javascript »

Ordenar Options de Select

Estas en el tema de Ordenar Options de Select en el foro de Javascript en Foros del Web. Hola, necesitaria ordenar los campos de una lista (select). esto es, aparece una lista con las opciones disponibles y dos botones, uno para subir y ...
  #1 (permalink)  
Antiguo 13/11/2007, 05:35
 
Fecha de Ingreso: septiembre-2004
Mensajes: 191
Antigüedad: 19 años, 7 meses
Puntos: 1
Ordenar Options de Select

Hola, necesitaria ordenar los campos de una lista (select).

esto es, aparece una lista con las opciones disponibles y dos botones, uno para subir y otro para bajar.

Pues lo que kiero esq cuando se le de al boton subir, si hay alguna opcion seleccionada suba hacia arriba.

Para bajar lo mismo.

Y el select es multiseleccion, por lo que si hay varias seleccionadas pues tiene q subir/bajar esas opciones.

gracias
  #2 (permalink)  
Antiguo 13/11/2007, 07:11
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Ordenar Options de Select

Hola sanmi69:

¿Lo has intentado? ¿Con qué código base contamos? Acostumbrate a colocar un código sobre el que todos podamos trabajar por igual.

Te dejo aquí un boceto, la función abajo() te la puedes imaginar:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<
head>
<
meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
<
meta name="Author" content="derkeNuke" />
<
title>Página nueva</title>
<
style type="text/css">

</
style>
</
head>

<
body>



<
select multiple="multiple" size="10" id="elSelect">
    <
option value="0">cero</option>
    <
option value="1">uno</option>
    <
option value="2">dos</option>
    <
option value="3">tres</option>
    <
option value="4">cuatro</option>
    <
option value="5">cinco</option>
    <
option value="6">seis</option>
    <
option value="7">siete</option>
    <
option value="8">ocho</option>
    <
option value="9">nueve</option>
</
select>
<
button type="button" onclick="arriba()">Arriba</button>
<
button type="button" onclick="abajo()">Abajo</button>




<
script type="text/javascript">
<!--

// document.getElementById abreviado
function $(x) { return document.getElementById(x); }

function 
arriba() {
    var 
elSel = $("elSelect");
    var 
opciones elSel.options;
    var 
opcionesSeleccionadas = [];
    for(var 
i=0l=opciones.lengthi<li++) {
        if( 
opciones[i].selected )
            
opcionesSeleccionadas.pushopciones[i] );
    }
    
// ahora tenemos que sustituir opcionA por opcionB (burdamente porque el IE no deja directamente)
    
function cambiarPosicionOption(optionAoptionB) {
        
elSel.optionsoptionA.index ] = new Option(optionB.textoptionB.value);
        
elSel.optionsoptionB.index ] = new Option(optionA.textoptionA.value);
    }
    for(var 
i=0l=opcionesSeleccionadas.lengthi<li++) {
        
// sustituimos cada opcion por la anterior
        
var hayAnterior opcionesSeleccionadas[i].index 0;
        if( 
hayAnterior ) {
            var 
elAnterior elSel.optionsopcionesSeleccionadas[i].index ];
            
cambiarPosicionOptionopcionesSeleccionadas[i], elAnterior);
        }
    }
}

function 
abajo() {
    
}

// -->
</script>

</body>
</html> 

Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 13/11/2007, 08:12
 
Fecha de Ingreso: septiembre-2004
Mensajes: 191
Antigüedad: 19 años, 7 meses
Puntos: 1
Re: Ordenar Options de Select

gracias, era lo que necesitaba, te cojo el codigo para modificarlo para que valga para la aplicacion.

No puse el codigo, porq crei que no hacia falta, ya que solo era un select, y 2 botones.

Muchas gracias

PD: Intener lo he intentaqdo, pero en temas de javascript.....
  #4 (permalink)  
Antiguo 13/11/2007, 08:40
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Ordenar Options de Select

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.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 23/11/2007, 06:20
 
Fecha de Ingreso: septiembre-2004
Mensajes: 191
Antigüedad: 19 años, 7 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
  #6 (permalink)  
Antiguo 23/11/2007, 09:15
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Ordenar Options de Select

Muy bien sanmi69, ¡perfecto!

__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:59.