Foros del Web » Programando para Internet » Javascript »

eliminar option de un select al seleccionar

Estas en el tema de eliminar option de un select al seleccionar en el foro de Javascript en Foros del Web. Hola, hacia tiempo que no posteaba ninguna duda en el foro.. que raro en mi.. jejeje Bueno, vereis, os planteo la funcionalidad y a ver ...
  #1 (permalink)  
Antiguo 11/04/2005, 08:29
Avatar de markshock  
Fecha de Ingreso: abril-2004
Ubicación: Allí, al fondo a la izqui
Mensajes: 316
Antigüedad: 20 años
Puntos: 0
Exclamación eliminar option de un select al seleccionar

Hola,

hacia tiempo que no posteaba ninguna duda en el foro.. que raro en mi.. jejeje

Bueno, vereis, os planteo la funcionalidad y a ver si me podeis hechar una mano por que no se como plantear el código.

Tengo un listado de productos que se genera desde base de datos mediante ASP.

En cada fila de producto, hay un select con opcion de seleccionar del 1 al 15.

Este select se va ha emplear para asignarle un orden de salida al producto en la página principal del listado de productos del site.

Quisiera hacer que cuando seleccionen una de las 15 posiciones, desapareciera de todos los selects que hay.. para que no puedan marcar 2 productos en la misma posición...

Alguna idea de como plantear el código javascript?

La jodienda es que el código se carga dinamicamente.. dede BBDD ...

Saludos y gracias!!
__________________
Señoooraaaa!! Que camisetas!!!

"Hay 10 tipos de personas, las que piensan en binario y las que no"
_________________________________
  #2 (permalink)  
Antiguo 11/04/2005, 08:48
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola markshock

Si tu select es algo así:

<select onchange="eliminar(this)" />
<option>-- Selecciona </option>
<option value="1">1</option>
...

podrás usar esta función para eliminar las opciones iguales en los otros select:
Código PHP:
function eliminar(obj) {
  
sel=obj.form.getElementsByTagName('select');
  for(
i=0;ele=sel[i];i++)
    if(
ele!=obj)
      for(
j=0;opt=ele.options[j];j++)
        if(
opt.value==obj.value)
          
ele.options[j]=null;

Espero que te sirva. Saludos,
  #3 (permalink)  
Antiguo 11/04/2005, 08:56
Avatar de markshock  
Fecha de Ingreso: abril-2004
Ubicación: Allí, al fondo a la izqui
Mensajes: 316
Antigüedad: 20 años
Puntos: 0
hola javierB..

ese codigo me va genial, mientras me respondias habia estado montando uno similar ;) ahora me estoy peleando para que...

Si en un producto selecciono la posicion 2, esta desaparece de los demas selects, eso guay. Pero si en ese mismo producto despues le cambio la 2 por la 3.. en los demas select sigue eliminada la opcion 2 !!! arghh! a ver si consigo con vuestra ayuda solucionar esto...

thanks.
__________________
Señoooraaaa!! Que camisetas!!!

"Hay 10 tipos de personas, las que piensan en binario y las que no"
_________________________________
  #4 (permalink)  
Antiguo 11/04/2005, 09:59
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola de nuevo.

He hecho algunos cambios. El select debería quedar así: <select ante="0" onchange="eliminar(this)" />

Y el código sería este:
Código PHP:
function eliminar(obj) {
  
anterior=obj.getAttribute('ante');
  if (
anterior!="0"anadir(anterior,obj);
  
sel=obj.form.getElementsByTagName('select');
  for(
i=0;ele=sel[i];i++)
    if(
ele!=obj)
      for(
j=0;opt=ele.options[j];j++)
        if(
opt.value==obj.value) {
          
obj.setAttribute('ante',opt.value);
          
ele.options[j]=null;
          }
}
function 
anadir(num,obj) {
  
sel=obj.form.getElementsByTagName('select');
  for(
i=0;ele=sel[i];i++) 
    if(
ele!=obj)
      
ele.options[ele.options.length]=new Option(num,num);

El problema que tiene es que las nuevas opciones las añade al final, en lugar de colocarlas en orden. Si se me ocurre algo mejor... volveré

Saludos,
  #5 (permalink)  
Antiguo 12/04/2005, 00:37
Avatar de markshock  
Fecha de Ingreso: abril-2004
Ubicación: Allí, al fondo a la izqui
Mensajes: 316
Antigüedad: 20 años
Puntos: 0
Hi javierB...

Yo mas o menos e logrado hacer lo mismo que tu... pero no encuentro de que forma puedo dejar ordenados los options de nuevo.. al sacar uno y meter otro... quizas lo suyo seria crear un array con el añadido al final como hace ahora y hacerle una ordenación antes de imprimir los options...

Bueno, sigo con el tema, gracias javierB por tu ayuda, y agradezco cualquier colaboración...

Un saludo de buena mañana.
__________________
Señoooraaaa!! Que camisetas!!!

"Hay 10 tipos de personas, las que piensan en binario y las que no"
_________________________________
  #6 (permalink)  
Antiguo 12/04/2005, 00:45
Avatar de markshock  
Fecha de Ingreso: abril-2004
Ubicación: Allí, al fondo a la izqui
Mensajes: 316
Antigüedad: 20 años
Puntos: 0
vaya jabierB he estado revisand tu código y muy buena la idea de setAttribute para marcar uno anterior... tio... eres una maquina.
__________________
Señoooraaaa!! Que camisetas!!!

"Hay 10 tipos de personas, las que piensan en binario y las que no"
_________________________________
  #7 (permalink)  
Antiguo 12/04/2005, 02:03
Avatar de markshock  
Fecha de Ingreso: abril-2004
Ubicación: Allí, al fondo a la izqui
Mensajes: 316
Antigüedad: 20 años
Puntos: 0
Solucionado...

NAda joer yo buscando la manera de ordenar mediante array etc... y no hace falta!!!

solucion:

Código:
function marcar(obj) { 
  anterior=obj.getAttribute('ante');
  if (anterior!=null){anadir(anterior,obj);} 
  sel=obj.form.getElementsByTagName('select'); 
  for(i=0;ele=sel[i];i++){
    if(ele!=obj){
      for(j=0;opt=ele.options[j];j++){
        if(opt.value==obj.value){ 
          obj.setAttribute('ante',opt.value); 
          ele.options[j]=null; 
        }
      }
    }
  }
} 

function anadir(num,obj) { 
  sel=obj.form.getElementsByTagName('select'); 
  sel.sort(); //---solo faltaba esa linea para ordenar los select.
  for(i=0;ele=sel[i];i++){
    if(ele!=obj){
      ele.options[ele.options.length]=new Option(num,num); 
    }
  }
}
para quien lo necesite.
__________________
Señoooraaaa!! Que camisetas!!!

"Hay 10 tipos de personas, las que piensan en binario y las que no"
_________________________________
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 16:05.