problemita con selectores.
4 seguidores
Hola a todos...
tengo una base de datos desde la cual relleno dos selectores.
el primero es un lista de nombres consturctoras y el segundo es una lista de nombres de personas, cada uno relacionado con una de las constructoras.
lo que quiero es hacer un select de nombres de personas que se rellene en base a lo que el cliente ha seleccionado en el tirador de constructoras. es decir, que si el usuario ha seleccionado la constructora 1 el select de personas se rellene con los nombres de las personas que pertenecen a esa constructora.
Uso ASP, por si sirve de algo, aunque creo que esto va con Javascript no? :)
cbp
si, lo puedes hacer con javascript, con el evento onchange del primer select. con ese evento disparas una funcion que llame cambia a la que pasas el nombre de la constructora, y en función de cual sea vas añadiendo options al select inicialmente vacío. hay un constructor en javascript para ir añadiéndolos.
si te lo quieres currar más y dependiendo de cual sea el volumen de nombres y de constructoras, lo que puedes hacer es cargar todo inicialmente en arrays de javascript, para tenerlas ya metidas y que cuando el usuario cambie no tenga que esperar la llamada al asp que extraiga los nombres que necesites. así únicamente haces una llamada inicial en la carga de la página a tu asp. hay páginas que lo hacen así y la verdad es que para el usuario es mucho más cómodo.
black
vale... esoty haciendo lo que me contentas...
ahora estoy construyendo la query...
<code>encargados.Source = "SELECT * FROM Usuarios WHERE constructora = "
</code>
como hago para poner dentro de un ASP el valor del select constructora?
cbp
me imagino que tendrás que pasárselo en la llamada al asp...
<code>
function actualizaEmpresa (valorEmpresa) {
// aquí llamas al asp pasándole la variable "valorEmpresa"
}
<option name=empresa_1 value=nombre_empresa_1 onChange="actualizaEmpresa(this.value)">empresa 1</option>
</code>
black
vale... estoy sacando todo pero no sé como hacer los arrays... como declaro una variable en ASP para que me sirva en javascript? :)
hartum
Me parece que la estas cagandoooooooooo.............
me explico, normalmente los scripts de listas deplegables funcionan asi,
lista1->valor1, valor2,valor3.........
si seleccionas valor1 lista2-> valor1.1, valor 1.2, valor 1.3.......
es decir que normalmente todos los valores, estan ya en la pagina y se muestran dependiendo de lo que escojas, sino vas a tener que hacerlo recragando la pagina, y entonces tendras que mandar el valor del select 1, y los resultados de todo el select2 ¿me explico?
es decir, si lo quieres hacer sin recargar pagina tienes que mandar todos los valores y hacer la seleccion por javascript, si recargas pagina con mandar el valor del primer select, hacer una consulta y sacar los valores del segundo select te basta.
cbp
jeje, ahí ya me has pillado, no me saques del cliente que me pierdo, asp, jsp y php lo justito para no liarme. yo creo que el proceso debería ser el siguiente:
- insertar código asp antes del contenido del <body> que recupere todos los nombres y los introduzca en un array de javascript cuyo nombre sea el de la empresa asociada.
- en el evento onchange de cada option del primer select, jugar con javascript para recuperar los nombres que te interesen.
- actualizar el 2º select
pero es en el primer paso en el que no te puedo ayudar, lo siento. si ves que te lías o algo puedo preguntar a alguien en mi curro, que aquí no son tan zotes como yo ;)
cbp
<b>hartum</b>, según lo que dices tú, ¿los pasos que he puesto justo arriba son correctos? es que no termino de pillar muy bien tu post, lo siento :(
black
ya tengo los valores en ASP, pero como los paso a javascript?
si pongo...
<code>
<script LANGUAGE="JavaScript">
<!-- Begin
valor[0] = '<%=(valor01)%>'
valor[1] = '<%=(valor02)%>'
valor[2] = '<%=(valor03)%>'
....
</code>
vale? y si eso vale, como hago para poder hacer x numero de valores? porque no sé el número total de arrays que necesito... que dificil!!!!
cbp
el número total de arrays que necesitas sería la longitud del select 1, ¿no? en ese caso lo puedes recuperar con
var numeroArrays = document.nombre_formulario.nombre_select.length;
black
no me entero...
Tengo esto con lo que preparo una cadena que....
<code>
<% dim Indice
Indice = 0
'cargamos todos los encargados de todas las constructoras
set constructoras = Server.CreateObject("ADODB.Recordset")
constructoras.activeConnection = MM_imoel_STRING
constructoras.Source = "SELECT distinct constructora FROM Usuarios"
constructoras.CursorType = 0
constructoras.CursorLocation = 2
constructoras.lockType = 1
constructoras.Open()
valores = ""
While (NOT constructoras.EOF)
'mostramos todos usuarios de cada construtora
IdConstructora = (constructoras.fields.item("constructora").value)
set usuarios = Server.CreateObject("ADODB.Recordset")
usuarios.activeConnection = MM_imoel_STRING
usuarios.Source = "SELECT * FROM Usuarios WHERE constructora = '" + IdConstructora + "'"
usuarios.CursorType = 0
usuarios.CursorLocation = 2
usuarios.lockType = 1
usuarios.Open()
valores = valores & ("GRUPO[" & indice & "] = '")
'response.write(valores)
While (NOT usuarios.EOF)
valores = valores & (usuarios.fields.item("usuario").value)
usuarios.MoveNext()
valores = valores & (", ")
Wend
If (usuarios.CursorType > 0) Then
usuarios.MoveFirst
Else
usuarios.Requery
End If
usuarios.close()
valores = valores & ("'")
'response.write(valores)
'quitamos la ultima coma...
NumeroCaracteres = len(valores)
valores = (left(valores, NumeroCaracteres - 3))
valores = valores & "'" & vbCrLf
constructoras.MoveNext()
indice = indice + 1
Wend
If (constructoras.CursorType > 0) Then
constructoras.MoveFirst
Else
constructoras.Requery
End If
constructoras.close()
response.write (valores)
%>
</code>
... luego lo preparo para que parezca un Array...
<code>
<script LANGUAGE="JavaScript">
<!-- Begin
var valores = new Array()
<%=(valores)%>
// End -->
</script>
</code>
el select uno tiene estos valores...
<code>
<select name="constructoras" class="formulario" id="constructoras">
<option value="vacio" selected>CONSTRUCTORAS</option>
<option value="vacio"></option>
<option value="1">Imoel</option>
<option value="2">constructora 02</option>
<option value="3">constructora 03</option>
<option value="4">constructora 04</option>
<option value="5">constructora de nombre muy la...</option>
<option value="6">constructora 06</option>
<option value="7">constructora 07</option>
<option value="8">constructora 08</option>
</select></code>
que hago? no pillo la idea, porque servidor de javascript... nada de nada... :(
cbp
jo, pedazo de asp que me has plantado. a ver...
<code><script language="JavaScript">
<!--
window.onload = function() {
for (i=0;i<document.nombre_formulario.nombre_select.length;i++)
var <%=nombre_empresa%> = new Array();
for (j=0;j<<%=numero_nombres_de_la_empresa%>;j++) {
<%=nombre_empresa%>[i] = <%=nombres_de_la_empresa%>[j]
}
function actualizaSelect (nombre_empresa) {
// aquí construyes el select en función de la empresa seleccionada
}
//-->
</script>
...
<option name=nombre_empresa value=nombre_empresa onChange="actualizaSelect(this.value)">nombre de la empresa</option>
</code>
siento no ponerte el código para construir el select pero es que tendría que mirarlo y no tengo tanto tiempo :(
ahora ya es cosa tuya reemplazar lo que aparece entre <%= %> por sus valores correspondientes, la comunicación entre asp y javascript no me la piloto :(
black
vale! :)
pensaba que con ese ASP no iba a ayudarme ni mi madre :D
gracias! lo miro... ;)
black
una duda... puedo hacer un array que sea...
valor[1] = 'aaa, bbb, ccc'
valor[3] = 'sss, eee' uuu'
es decir que los valores de los indices no sean correlativos y comenzar por ejemplo por el 1 en lugar del 0?
meddle
poder puedes, pero internamente estas creando un array que empieza en 0 y llega a indice 3, teniendo solo valores los indices 1 y 3. Puedes usarlo, pero ojo si tienes que hacer length porque puedes tener un susto ;)
black
vale vale! voy bien... y si necesito hacer un length...
<code>
for (i=0;i<GRUPO.length;i++){
if (GRUPO[i] != undefined){
alert(i + ' ' + GRUPO[i]);
}
}</code>
esto no vale para ignorar los que sean undefined?
cbp
¿si no existe te devuelve undefined o null?
black
como he creado un array
GRUPO[1] = 'usuario, Administrador'
GRUPO[2] = 'constructora'
primero busca el indice [0] y como no existe en ese
for (i=0;i<GRUPO.length;i++){
me devuelve undefined pero con null funciona! :) gracias! :D
cbp
jeje, de nada, me alegro :D
black
yo otra vez...
he conseguido hacer "montar" esto...
<code>
<script LANGUAGE="JavaScript">
<!-- Begin
var GRUPO = new Array();
// todos los arrays
GRUPO[1] = 'usuario, Administrador'
GRUPO[2] = 'constructora'
function cambia (valor) {
for (i=0;i<GRUPO.length;i++){
if (GRUPO[valor] != null){
alert(GRUPO[valor]);
}
}
}
// End -->
</script></code>
Tengo el array GRUPO con los valores que he conseguido del ASP, y puedo hacer que el campo "encargados" (el campo que tengo que cambiar) si es un campo tipo input, pille el valor del array que selecciono, pero no sé como montar el select entero cuando este campo es de tipo select... igual, me lo habeis dicho en algun post anterior, pero no lo he entendido...
grasias por seguir ayudandome... :)
black
voy narrando lo que consigo y si alguien ve algo mal me lo comenta, si le parece bien... :) he cambiado la funcion "un poquito.."
<code>
function cambia (valor) {
for (var y=0;y<GRUPO[valor].length;y++){
var newopt = new Option (GRUPO[valor])
form1.encargado.options[y] = newopt;
alert(GRUPO[valor]);
}
}</code>
.. el fallo? que me salen un montón de options... :)
cbp
para añadir un option a un select:
new Option("texto", "valor", defaultSelected, selected);
por ejemplo:
new Option("constructora 1", "1", false, false);
o bien
new Option("constructora 1", "1");
para añadir el "name", si quieres, lo tienes que hacer luego a mano:
select.options[i].name = "loquesea"
para borrar todos no me acuerdo muy bien, pero creo que había que igualarlo a null.
select.options[i] = null;
espero que te sirva. si no, intenta concretar más en qué parte del código te lías :)
black
grrracias! :)
he conseguido añadir options nuevos a mi select... el problema está en el array... cuando le digo
<code>
for (var y=0;y<GRUPO[valor].length;y++){
... </code>
de por ejemplo, grupo[1]:
GRUPO[1] = 'usuario, Administrador'
el length me cuenta todas las letras, no me toma cada palabra como elemento... useasé que me da 22 en lugar de 2, por que? :(
cbp
tienes que pillar la cadena y hacerle un split seprando por comas seguidas de espacio.
var cadena = GRUPO[1];
var elementosCadena = cadena.split(', ');
ahora en elementosCadena[0] tienes "usuario" y en elementosCadena[1] "administrador" y elementosCadena.length tiene que ser 2 :D
black
PRUEBA SUPERADAAAAAAAAAAAAAAAA!!!! :D
GRACIAS GRACIAS GRACIAS!!! :)
tengo que tocar un par de cositas y pongo lo que he conseguido!
cbp
jeje, me alegro, hombre :D