Foros del Web » Programando para Internet » Javascript »

Convertir una constante de formulario en una variable

Estas en el tema de Convertir una constante de formulario en una variable en el foro de Javascript en Foros del Web. Hola. Este es el código javascript y los 2 formularios (listas/select): Cita: <script language="javascript"> function seleccionar() { var form = document.getElementById('formulario'); var indice = form.cantidad.selectedIndex; ...
  #1 (permalink)  
Antiguo 22/03/2012, 05:46
 
Fecha de Ingreso: octubre-2008
Mensajes: 70
Antigüedad: 15 años, 6 meses
Puntos: 2
Convertir una constante de formulario en una variable

Hola. Este es el código javascript y los 2 formularios (listas/select):

Cita:
<script language="javascript">
function seleccionar() {
var form = document.getElementById('formulario');
var indice = form.cantidad.selectedIndex;
var c_gramos = form.cantidad.options[indice].value;
indice = form.carnes.selectedIndex;
var calorias = form.carnes.options[indice].value;
var nombre = form.carnes.options[indice].text;

lista.push(new Seleccion(nombre,calorias,c_gramos));
calculate();
}
...
...
...
</script>

<select name=carnes onchange="seleccionar(this);"/>
<select name=cereales onchange="seleccionar(this);"/>
Como se ve en el script, hay una constante llamada "carnes", ( var calorias = form.carnes.options[indice].value; var nombre = form.carnes.options[indice].text;)
que cuando en la lista " select name=carnes " se hace una selección, se llama a la funcion seleccionar(), haciendo el cálculo correspondiente. Esto anda muy bien, no hay problemas.
Yo quiero mejorar el código, porque cuando agrego una lista como por ejemplo:

Cita:
<select name=cereales onchange="seleccionar(this);"/>
Llama a la funcion donde esta "carnes" y sigue colocando valores de carnes y no de cereales.
En síntesis, yo dupliqué la función con otro nombre (seleccionar_cereales) y funciona con cereales. Pero el código es redundante y si quiero poner, por ejemplo, 10 selects, tengo que poner 10 funciones seleccionar_X.
Mi pregunta es como puedo hacer que la palabra carnes DE LA FUNCION SELECCIONAR sea una variable, y que cuando cambie un select cualquiera, cambie el valor de esta variable por carnes, cereales, etc.
Espero que me haya hecho entender. Saludos
  #2 (permalink)  
Antiguo 22/03/2012, 07:43
 
Fecha de Ingreso: octubre-2008
Mensajes: 70
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Convertir una constante de formulario en una variable

Hice una mejora en el código (creo) le agregue un for,
Cita:
function seleccionar() {
var form = document.getElementById('formulario');
var indice = form.cantidad.selectedIndex;
var c_gramos = form.cantidad.options[indice].value;
for (var i=1; i<3 ;i++) {
indice = form.elements[i].selectedIndex;
var calorias = form.elements[i].options[indice].value;
var nombre = form.elements[i].options[indice].text; }

lista.push(new Seleccion(nombre,calorias,c_gramos));
calculate();
}
La idea es que recorra los formularios (el 1 de carnes y el 2 de cereales), pero, me trabaja solo con la lista (2) de cereales y con la 1 de carne no pasa nada. Casi diria que tengo que poner un switch para que funcione

Última edición por setenta; 22/03/2012 a las 07:50
  #3 (permalink)  
Antiguo 23/03/2012, 05:20
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 74
Antigüedad: 12 años, 1 mes
Puntos: 12
Respuesta: Convertir una constante de formulario en una variable

Como te han sugerido en el otro hilo, es mas facil (aunque no imprescindible) si al gestor del evento onChange de la lista desplegable le pasas un parametro informando que control llama a la funcion.

Código:
<select onchange="seleccionar(this);">...
Luego en la funcion simplemente usas este parametro sin preocuparte de que lista desplegable es realmente, porque ambas tienen la misma estructura (calorias-nombre). El sistema es extensible a cualquier numero de listas.

Código:
function seleccionar(objSelect) {
  var form = document.getElementById('formulario');
  var indice = form.cantidad.selectedIndex;
  var c_gramos = form.cantidad.options[indice].value;
  
  indice = objSelect.selectedIndex;
  var calorias = objSelect.options[indice].value;
  var nombre = objSelect.options[indice].text;
  
  lista.push(new Seleccion(nombre,calorias,c_gramos));
  calculate(); 
}
Lo del bucle para acceder a los elementos del formulario, puede funcionar. Pero no es buena idea porque te limita a que las listas esten todas dentro del mismo formulario y sean consecutivas (sin ningun control o campo intercalado).

Etiquetas: constante, formulario, funcion, variables
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 13:59.