Campos relacionados

Estoy desarrollando una web y necesito tu ayuda, trabajo con bbdd y ningún problema, el "problema" me surge en un formulario, tengo varios campos y uno es un desplegable, los datos del mismo los coge de otra base de datos (son productos), más abajo hay un campo de texto normal (precio) y me gustaría que este se rellenase solo al elegir del desplegable un producto u otro.
Había pensado al principio, que elegir una opción en el desplegable llamase a la misma página pasando por get el producto elegido y así se podría buscar en la base de datos el precio, así estaría resuelto, pero claro, si el usuario ha rellenado muchos campos de ese formulario los "perdería".
La cuestión es si se puede hacer sin tener que recargar la página. QUE el usuario elija un producto del desplegable y a continuación salga el precio en otro campo. Esto lo he hecho con lotus notes, pero claro, no tiene nada que ver.

5 Respuestas

Respuesta
1
El mejor camino para lograr lo que buscas es utilizando JavaScript, éste permite cambiar el contenido de los campos en la página sin recagarla.
Suerte
Si, tienes razón, pero la cuestión es como cojo esos valores de una base de datos, con javascript puedo hacer eso pero con unos valores predefinidos y fijos. Pero con base de datos estos valores cambiarán.
¿Se t ocurre algo para hacerlo como dices pero con base de datos?
Muchas gracias por contestar :D
Vamos a hacer una análisis de las posibilidades:
JavaScript: cuando generás el código, mezclándolo con con ASP podes completar las relaciones producto-precio dentro del script. Cada vez que habro la página, el ASP llena el JavaScript con valores actualizados.
Otra opción es con Flash: la última versión es muy práctica para hacer consultas a un archivo ASP si salir de la película swf. Seleccionás el producto, hacés la consulta y mostrás el precio correspondiente.
Respuesta
1
Como vos decís, la solución más fácil es darle submit al formulario, y traer mediante una consulta el precio. Para esto, tendrías que estar controlando si le diste submit al formulario para poder mantener los datos.
Otra solución, tal vez un poco más compleja (pero que no "submitea" el formulario) sería guardarte del lado del cliente un vector con los precios de los productos. No sé que tan pesado quedaría, pero podrías probarlo.
La cosa sería así:
<%
Response.Write("<script language='JavaScript'>")
Response.Write("var aPrecios = new Array();")
While Not oRecordset.EOF
Response.Write("aPrecios['" & oRecordset("CodigoProducto") & "'] = '" & oRecordset("Precio") & "';"
oRecordset.MoveNext
Wend
Response.Write("</script>")
%>
Lo que lográs con esto, es una colección de precios del lado del cliente, a la que accedés de la manera Colección[CodigoProducto].
Lo que te faltaría hacer, es en el evento onChange del desplegable, poner lo siguiente:
<select name="Productos" id="Productos" onChange="tuCampoPrecio.value = aPrecios[this.value];">
Donde le decís que al campo donde querés mostrar el precio, le ponga el precio que dice la colección para el producto seleccionado.
Respuesta
1
Poderse se puede perfectamente, cuando generas el desplegable a partir de la base de datos tienes que generar en pararlelo un array con los precios de cada opción, así luego por javascript cuando cambia el combo puedes buscar en ese array el precio y ponérselo al campo que quieras.
Respuesta
1
Se que con ASP.NET se hace, ya que trabaja de esa forma. Pero son ASP 3, no creo que se pueda, a no ser que te puedas crear una matriz en la memoria (veriable session) y al seleccionar un campo del desplegable, mediante javascript se rellene el campo del precio.
Creo que así podrás... pero te lo deberás currar, ya que yo solo tengo la idea,... creo que puede ir por ahí.
Respuesta
1
La solución a ese problema es usar javascript, debes cargar en un array todos los precios de los productos. De tal forma que cuando el usuario seleccione uno, en el evento onChange, haces que el campo precio tome el valor del array.
Si no sabes javascript sería mejor que usaras la opción que comentas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas