Foros del Web » Programando para Internet » Javascript »

buscar duplicado en combos

Estas en el tema de buscar duplicado en combos en el foro de Javascript en Foros del Web. Hola, estoy haciendo un formulario con 10 combos con los mismos datos, digamos que sean productos, estoy tratando de que solo se pueda escoger una ...
  #1 (permalink)  
Antiguo 30/11/2006, 14:08
 
Fecha de Ingreso: abril-2005
Ubicación: Lima-Peru
Mensajes: 313
Antigüedad: 19 años
Puntos: 1
buscar duplicado en combos

Hola, estoy haciendo un formulario con 10 combos con los mismos datos, digamos que sean productos, estoy tratando de que solo se pueda escoger una vez un producto en cada combo, osea si en el primer combo escogen 'papas', en los siguiente se deberia lanzar un mensaje que ya no se puede escoger 'papas', estuve probando metiendo en el evento onchange del combo el nombre del producto y comparando con el anterior pero no da buenos resultados

Código:
<script language="javascript">

var a=new Array; var i=0; var f=0;

function cambiar(prod){

if(document.getElementById(prod).options[document.getElementById(prod).selectedIndex].value!='no')
	{
	a[i]=document.getElementById(prod).options[document.getElementById(prod).selectedIndex].label;
	i++;
	}
if(f>=1) 
{
buscar();

}f++;

}

function buscar(){
for(d=0;d<=i;d++){
	if (a[d]==a[d-1])
	{
		alert("el elemento ya existe");
	}
	else{
		alert("No existe aun");
	
	}
}

}

function mostrar(){
	for (b=0;b<=1;b++)
	{
	alert(a[b]);
	}
}

function limpiar(){
i=0;d=0;f=0
	for (c=0;c<=1;c++){
		a[c]=0;
	}

}
</script> 
y en el body
Código:
<select id="combo2" onchange="cambiar(this.id)">
<option class="clasecombo" id="optcombo2" label="lblcombo1" title="titlecombo"  >papas</option>
<option class="clasecombo2" id="optcombo2" label="lblcombo2" title="titlecombo2" >tomates</option>
<option class="clasecombo3" id="optcombo3" label="lblcombo3" title="titlecombo3"  >zanahorias</option>

</select>
Asi como este 10 combitos. Como veran el codigo es muy basico, meto en un array los valores seleccionados, y luego trato de compararlos para ver si ya los han seleccionado, pero al seleccionar mas de una vez el mismo no compara los valores, alguien podria explicarme la logica de como tendria que hacer las comparaciones o tiene algun enlace que me haga ver la luz, gracias....
  #2 (permalink)  
Antiguo 30/11/2006, 18:20
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Buenas noches MaXaC

Miraa que te parece este codigo (lo acabo de hacer adaptado a lo que pides)

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
	<title>Untitled</title>
	<script language="javascript" type="text/javascript">
		// Función para validar si el elemento que se ha señalado, ya está en otro combo
		function validateDuplicates (combo)
		{
			// guardamos la posición del elemento seleccionado
			var posicionSeleccionada = combo.selectedIndex;
			
			// Obtenemos todos los combos del formulario
			var arrayCombos = document.forms["formularioCombos"].getElementsByTagName("select");
			
			// Variables para guardas lo seleccionado
			var yaEstaSeleccionado = false;
			var posicionComboEsta = null;
			// Recorremos todos los combos
			for (contCombos=0;contCombos<arrayCombos.length;contCombos++)
			{
				// Si el elemento seleccionado no es el primero (seleccione) --> Esto es un control para saltarse el `rimer elemento, que no nos vale para nada
				if (combo.selectedIndex != 0)
				{
					// si el combo que actualmente estamos recorriendo NO ES EL COMBO EN EL QUE HEMOS PULSADO
					if (arrayCombos[contCombos].id != combo.id)
					{
						// comprobamos si el Combo que actualmente estamos recorriendo (arrayCombos[contCombos]), tiene como elemento seleccionado  el valor del combo en el que hemos pinchado (combo.selectedValue)
						if (arrayCombos[contCombos].options[arrayCombos[contCombos].selectedIndex].value == combo.options[posicionSeleccionada].value)
						{
							yaEstaSeleccionado = true;
							posicionComboEsta = (contCombos + 1);
						}
					}
				}
			}
			
			// si el elemento que hemos pinchado YA ESTABA SELECCIONADO, en el combo acual, señalamos la primera opción
			if (yaEstaSeleccionado == true)
			{
				combo.selectedIndex = 0;
				alert ("El elemento [" + combo.options[posicionSeleccionada].value + "] ya estaba seleccionado en el combo [" + posicionComboEsta + "].\Señale otro");
			}
		}
	</script>
</head>

<body>
<form name="formularioCombos" action="" method="post">
	<select id="combo1" onchange="validateDuplicates(this)">
		<option value="">Seleccione</option>
		<option value="A">A</option>
		<option value="B">B</option>
		<option value="C">C</option>
		<option value="D">D</option>
		<option value="E">E</option>
	</select>
	
	<select id="combo2" onchange="validateDuplicates(this)">
		<option value="">Seleccione</option>
		<option value="A">A</option>
		<option value="B">B</option>
		<option value="C">C</option>
		<option value="D">D</option>
		<option value="E">E</option>
	</select>
	
	<select id="combo3" onchange="validateDuplicates(this)">
		<option value="">Seleccione</option>
		<option value="A">A</option>
		<option value="B">B</option>
		<option value="C">C</option>
		<option value="D">D</option>
		<option value="E">E</option>
	</select>
	
	<select id="combo4" onchange="validateDuplicates(this)">
		<option value="">Seleccione</option>
		<option value="A">A</option>
		<option value="B">B</option>
		<option value="C">C</option>
		<option value="D">D</option>
		<option value="E">E</option>
	</select>
	
	<select id="combo5" onchange="validateDuplicates(this)">
		<option value="">Seleccione</option>
		<option value="A">A</option>
		<option value="B">B</option>
		<option value="C">C</option>
		<option value="D">D</option>
		<option value="E">E</option>
	</select>
</form>

</body>
</html>
Si tienes algún tipo de duda, pregunta sin problemas

  #3 (permalink)  
Antiguo 30/11/2006, 21:09
 
Fecha de Ingreso: abril-2005
Ubicación: Lima-Peru
Mensajes: 313
Antigüedad: 19 años
Puntos: 1
Hola Javi!! muchísimas gracias por darte un tiempo para resolver este problema, el nivel de tu solucion es alto, hay varias cosas que no aplicaba como el if (combo.selectedIndex != 0), para evitar las primeras opciones, tan simple pero no lo habia visto , voy a desmenuzarlo mas para aprender.

El codigo es perfecto, ademas de aplicar otras funcionalidades como regresar al estado original del combo si ya fue seleccionado , para lo que estoy haciendo tuve que ponerle como segundo evento en el onchange porque tengo otro eventillo trabajando sobre los combos pero tu script no obstruye para nada los otros, ahora terminaré mas pronto mi proyectito, gracias nuevamente, por cierto podria ir a las faqs
  #4 (permalink)  
Antiguo 01/12/2006, 02:34
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 1 mes
Puntos: 10
Buenos días MaXaC.

Me alegra que el código que te puse te sea útil.
Y me alegro de que no obstruya el resto de eventos que tienes en tus combos

Respecto al tema de que valla a las Faqs, no se si eso debo de decirlo yo, o vosotros o los moderadores... por lo que lo dejo en manos de nuestros moderadores el decidir si debe ir o no

Reconforta mucho los agradecimientos y críticas de la gente que usa lo que posteamos, y sobre todo, si les resuelve su trabajo facilmente.

Para lo que necesites, aquí sigo.

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 08:27.