Foros del Web » Programando para Internet » Javascript »

saber si un select multiple cambió sus opciones

Estas en el tema de saber si un select multiple cambió sus opciones en el foro de Javascript en Foros del Web. Hola, los molesto por el siguiente tema. Tengo un select múltiple cuyas opciones se llenan con los registros de una base de datos. Además, de ...
  #1 (permalink)  
Antiguo 12/12/2005, 11:16
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 11 meses
Puntos: 535
saber si un select multiple cambió sus opciones

Hola, los molesto por el siguiente tema.
Tengo un select múltiple cuyas opciones se llenan con los registros de una base de datos. Además, de otra trabla, obtengo las "preferencias" seleccionadas anteriormente por un usuario. Con estas "preferencias", pongo "selected" al <option> que corresponda.

La idea es que el formulario no se pueda submitir si no se ha modificado ningna opción de éste select múltiple. Tampoco que se pueda hacer el submit en el caso que haya sido modificado y posteriormente vuelto al estado original... ¿me explico?

Supongamos que originalmente tenemos las opciones (con un + adelante las seleccionadas por defualt):

Código:
+ opción 1
opción 2
opción 3
+ opción 4 
Si el <select> se modifica (en cualquiera de sus combinaciones):

Código:
opción 1
opción 2
+opción 3
opción 4
... se efectúe el submit. Ahora, si luego de ocurrida esa modificación se vuelve al estado original (opciones 1 y 4 seleccionadas), no se pueda hacer el submit.

¿Se puede hacer? Supongo que si... la pregunta en realidad es ¿Cómo se puede hacer? :)
Gracias
__________________
...___...
  #2 (permalink)  
Antiguo 12/12/2005, 11:47
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 11 meses
Puntos: 535
Se me está ocurriendo algo así:

Código:
function EstablecerDefault(){
var ComDefault = '';
for (j = 0; j < document.FormComisiones.Comisiones.length; j++) {
if (eval("document.FormComisiones.Comisiones[" + j + "].selected") == true) {
ComDefault += eval("document.FormComisiones.Comisiones[" + j + "].value") + ",";
      }
   }
EstablecerVariableGlobal = ComDefault
}

function VerificarQueLaSelecciónActualSeaDistintaALaVariableGlobal(){
if (EstablecerVariableGlobal !== pepe){
//pepe tendrá el valor de hacer un procedimiento similar o igual al de la función EstablecerDefault()
submitir.formulario()
}
esle{
alertar(algo)
}
}

<body alCargar="EstablecerDefault()">
...
<input tipo botón alHacerClick="VerificarQueLaSelecciónActualSeaDistintaALaVariableGlobal()">
Me está faltando, creo, cómo establecer una variable global al onload y cómo recuperar ese dato desde la función VerificarQueLaSelecciónActualSeaDistintaALaVariabl eGlobal()

Es correcto el planteo? De ser así... ¿cómo defino una variable global para usarla en otra function?
__________________
...___...
  #3 (permalink)  
Antiguo 12/12/2005, 11:48
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 11 meses
Puntos: 772
Hola Al Zuwaga

A mí se me estaba ocurriendo esto otro, a ver si te sirve:
Código PHP:
<html>
<
head>
<
script type="text/javascript">
var 
selec=new Array();
function 
ini() {
  
obj=document.forms[0].sel;
  for(
i=0;ele=obj.options[i];i++) //recorre los option del select
    
selec[i]=ele.selected//almacena en el array si está o no seleccionado
}
function 
validar() {
  
obj=document.forms[0].sel;
  for(
i=0;ele=obj.options[i];i++) //vuelve a recorrer los options
    
if(ele.selected!=selec[i]) //si es distinto del valor almacenado en el array
      
return true//es que algo ha cambiado y devuelve verdadero
  
alert('¡No has cambiao ná!');
  return 
false;
}
</script>
</head>
<body onload="ini()">
<form action="tupagina.asp" onsubmit="return validar()">
<select name="sel" size="5" multiple>
<option selected>Uno</option>
<option>Dos</option>
<option>Tres</option>
<option selected>Cuatro</option>
</select>
<input type="submit" />
</form>
</body>
</html> 
Saludos,
  #4 (permalink)  
Antiguo 12/12/2005, 12:23
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 11 meses
Puntos: 535
Perfecto JavierB!! Muchas Gracias

Para sacarme de la duda, ¿cómo se hace para que una function devuelva un valor que pueda ser usado en cualquier parte del script?


EDIT: Creo darme cuenta que para ello, la variable debe estar definida fuera de cualkquier function. ¿No?
__________________
...___...
  #5 (permalink)  
Antiguo 12/12/2005, 12:31
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 11 meses
Puntos: 772
Hola de nuevo.

En efecto, pones la variable fuera de las funciones, y la usas donde te haga falta.

<script type="text/javascript">
var selec=new Array(); // Esto es una variable global
function ini() {

Me alegro de que te haya servido. Saludos,

Edito: pido disculpas a tunait y KarlanKas por no haber utilizado pepe. Un error imperdonable
  #6 (permalink)  
Antiguo 12/12/2005, 12:35
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 9 meses
Puntos: 1284
Hola Al Zuwaga:

Tu deducción es buena, aunque también puede crearse una variable dentro de una función, pero sin el uso del var, y haciendo constar de que cuelga del objeto window (padre do todos los objetos... y por ende de las variables globales... )

Bueno, evitando explicaciones raras...

function inicio() {
window["selec"] = new Array();// usando la definición de JavierB
//...
}

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 12/12/2005, 13:04
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 11 meses
Puntos: 535
Genial, otra manera de hacerlo.
Gracias barba ;)

Ya que estamos... no, nada, abro un nuevo mensaje.
__________________
...___...

Última edición por AlZuwaga; 12/12/2005 a las 13:13
  #8 (permalink)  
Antiguo 12/12/2005, 13:11
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 11 meses
Puntos: 772
Yo tampoco lo conocía, así que me lo anoto. Gracias caricatos
  #9 (permalink)  
Antiguo 12/12/2005, 13:20
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 9 meses
Puntos: 1284
¡Je, je!... ¡Gracias, gracias!

No es la primera vez que lo comento,

Es especialmente útil para recibir parámetros vía URL:

params = location.search.substr(1).split("&");
for (var i = 0, total = params.length; i < total; i ++)
window[params[i].split("=")[0]] = params[i].split("=")[1];

Saludetes
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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 01:36.