Foros del Web » Programando para Internet » Javascript »

Restablecer valor de un campo text

Estas en el tema de Restablecer valor de un campo text en el foro de Javascript en Foros del Web. Buenas noches: Estoy liado. La idea es esta. Genero un listado que incluye un campo con montos (valores). Sin embargo el listado esta generado de ...
  #1 (permalink)  
Antiguo 13/08/2011, 21:02
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Restablecer valor de un campo text

Buenas noches:
Estoy liado. La idea es esta. Genero un listado que incluye un campo con montos (valores). Sin embargo el listado esta generado de esta forma:

Cita:
<%
For J = iRecFirst To iRecLast
%>
<input type="text" id="monto<%= J %>" value="<%= arrDBData(3,J)%>">
<%
Next
%>
Entonces resulta que tengo varios campos con id secuencial (monto1, monto2, monto3, etc.

He agregado un evento onChange que verifica si se ha modificado el valor del campo y de ser así realizar una serie de procedimientos. Para capturar dicho valor hago lo siguiente:


Cita:
tempMontoOriginal="original"+id;
tempMontoNuevo="monto"+id;

montoOriginal=document.getElementById(tempMontoOri ginal).value;
montoNuevo=document.getElementById(tempMontoNuevo) .value;
Y hasta aquí todo funciona bien. Pero como he incluído un if(confirm()) para dar la opción al usuario de mantener el cambio o cancelarlo, si opta por lo segundo, debería de poder ser capaz de restablecer el campo a su valor original, el cual ya tengo capturado en la variable montoOriginal.

Sin embargo, dado que el id y el nombre de cada campo es secuencial (como en el ejemplo), ¿cómo puedo restablecer el valor a un campo determinado?. Si fueran nombres normales podría hacer algo simple como

Cita:
document.form.nombre-del-campo.value=montoOriginal;
Pero como ven, no tengo esa posibilidad.
¿Alguien tiene alguna idea o sugerencia sobre mi consulta?.

Muchas gracias por su tiempo.
Un saludo desde Lima, Perú
  #2 (permalink)  
Antiguo 14/08/2011, 02:37
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 5 meses
Puntos: 16
Respuesta: Restablecer valor de un campo text

Según entiendo, tu problema es básicamente la necesidad de almacenar el valor no sólo del campo que gatilla el evento si no que de todos los campos relacionados. De ser así, puedes guardar en un arreglo todos los valores de los campos con id montoN (N el número) de esta manera en arreglo(0) tendrás el valor del campo monto1, en arreglo(1) tendrás el valor del campo monto2 y así.

Espero sea esa tu duda, de no ser así, te pido explicarte mejor.

Saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #3 (permalink)  
Antiguo 14/08/2011, 14:42
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 10 meses
Puntos: 32
Respuesta: Restablecer valor de un campo text

Guarda todos los valores con su indentificador al cargar la página, ejemplo:

Código Javascript:
Ver original
  1. // Todo es dentro del evento onload
  2.  
  3. // Creamos una clase que contendrá los montos iniciales
  4. var montos_originales = {};
  5. // Guardamos todos los elementos "input" que tienen la palabra "monto" al inicio del atributo "id"
  6. var inputs_montos = document.querySelectorAll("input[id^=monto]");
  7. // Creamos un ciclo con X cantidad de inputs_montos
  8. for ( i = 0; i < inputs_montos.length; i++ ) {
  9.    // Guardamos el identificador del elemento
  10.     var ID = inputs_montos[ i ].id;
  11.    // Guardamos el monto original del elemento
  12.     var monto = inputs_montos[ i ].value;
  13.    // Ahora guardamos todo en la clase montos_originales
  14.     montos_originales[ ID ] = monto;
  15. }
  16. /* Listo ahora simplemente cuando quieras volver un monto a su estado original
  17.    solo ejecutas(en el evento onChange): this.value = montos_originales[ this.id ],
  18.    ejemplo:
  19.    <input type="text" id="monto1" value="10" onchange="if (!confirm('...'))this.value=montos_originales[this.id];" />
  20. */
Espero que eso pueda ayudarte a solucionar tu problema, saludos.

Última edición por IXtremeLT; 14/08/2011 a las 14:49
  #4 (permalink)  
Antiguo 15/08/2011, 09:50
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Restablecer valor de un campo text

Muchas gracias a ambos por sus respuestas. Pero creo que no me he explicado bien.
De una base de datos tomo una lista de montos que pongo a disposición para editarlos, de esta forma

Cita:
<%
Temp="Select * From Montos Order By Codigo"
Tabla1.Open Temp, Conexion
arrDBData = Tabla1.GetRows()
Tabla1.Close

iRecFirst = LBound(arrDBData 2)
iRecLast = UBound(arrDBData, 2)

For K = iRecFirst To iRecLast
%>
<input type="text" name="monto<%= arrDBData(0,K)%>" value="<%= arrDBData(3,K) %>" onChange="editar(<%= arrDBData(0,K)%>);">
<input type="hidden" name="original<%= arrDBData(0,K)%>" value="<%= arrDBData(3,K) %>">
<%
Next
%>
De esta forma, si vemos el código HTML resultante veremos algo así:

Cita:
<input type="text" name="monto1" value="654654" onChange="editar(1);">
<input type="hidden" name="monto1" value="654654">

<input type="text" name="monto2" value="98461" onChange="editar(2);">
<input type="hidden" name="original2" value="98461" onChange="editar(2);">

<input type="text" name="monto3" value="3241684" onChange="editar(3);">
<input type="hidden" name="original3" value="3241684">

......

<input type"text" name="monto10" value="98416251" onChange="editar(10);">
<input type"hidden" name="original10" value="98416251">
El dato arrDBData(0,K) es el que corresponde al ID del registro.

Entonces la función que tengo para "capturar" el monto, tanto original como el nuevo, es el siguiente:

Cita:
function editar(id)
{
tempMontoOriginal="original"+id;
tempMontoNuevo="monto"+id;

if(confirm("El monto ha sido modificado. ¿Desea hacer permamente este cambio?."))
{
montoOriginal=document.getElementById(tempMontoOri ginal).value;
montoNuevo=document.getElementById(tempMontoNuevo) .value;
//Aquí va el resto del código que hace uso de los nuevos datos
}
else
{
alert("Proceso cancelado por el usuario.");
//AQUÍ ES EL PROBLEMA
}
}
Entonces la idea es que cuando el usuario "cancele" el proceso, automáticamente se restablezca el valor original, que lo tengo en la variable montoOriginal. Pero...... como ven, el nombre del campo no es fijo sino dinámico o secuencial (como gusten llamarlo).

Por supuesto que probé pasar el nombre del campo de esta forma

Cita:
onChange="editar(<%= arrDBData(0,K)%>,'monto<%= arrDBData(0,K)%>')
pero al querer utilizarlo, sigo con el problema de no poder incluirlo en el clásico "document.nombredelformulario.nombredelcampo.value "

Cita:
function editar(id, nombre)
{
....
else
{
alert.......
document.form.nombre.value=montoOriginal;
}
}
Si pudiera hacer que nombre fuera el nombre real del campo editado sería genial. Pero la instrucción buscará un campo precisamente de nombre = nombre (obvio).

Estuve buscando algo similiar a un setElementById pero para sorpresa mía (en verdad pensé que habría una función inversa al getElementById) no hay.

Y ese es mi problema.
Espero haberme explicado mejor.
Me disculpo por no haber sido claro anteriormente.

Mil gracias
Un saludo desde Lima, Perú
  #5 (permalink)  
Antiguo 15/08/2011, 11:08
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 12 años, 10 meses
Puntos: 32
Respuesta: Restablecer valor de un campo text

Que tal,
Mmm creo que todo es por problemas de diseño si buscas otra estrategía para construir el HTML tal vez tengas mejor resultado, quisiera ayudarte pero en realidad no se por que dices que no puedes reestablecerlo con su valor original en ese simple else(a mí me parece muy posible con el código que veo allí), saludos.
  #6 (permalink)  
Antiguo 15/08/2011, 14:07
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Restablecer valor de un campo text

varias cosas
  • estás usando getElementById, pero los campos no tienen id
  • el campo hidden, si es sólo para reestablecer el valor, no te es necesarios. para eso eso tienes defaultValue
  • alguna cosa mas
Cita:
function editar(id)
{
tempMontoNuevo=document.getElementById(id);

if(confirm("El monto ha sido modificado. ¿Desea hacer permamente este cambio?."))
{
tempMontoNuevo.value;
//Aquí va el resto del código que hace uso de los nuevos datos
}
else
{
alert("Proceso cancelado por el usuario.");
tempMontoNuevo.value = tempMontoNuevo.defaultValue;
}
}

<input type="text" name="monto1" id="monto1" value="654654" onChange="editar(this.id);">
  #7 (permalink)  
Antiguo 16/08/2011, 13:37
Avatar de freesoftwarrior  
Fecha de Ingreso: marzo-2006
Mensajes: 362
Antigüedad: 18 años, 1 mes
Puntos: 10
Respuesta: Restablecer valor de un campo text

IXtremeLT muchas gracias por tu respuesta. Es claro que con el código mostrado no funciona como necesito. Es un poco largo explicar lo concerniente al diseño, pero lo único que puedo decirte es que se trata de una función muy simple: restablecer un campo. En verdad gracias por tu tiempo.

IsaBelM, es verdad que en el código que puse no había indicado id, pero en la práctica si lo hago (por eso he editado el código). He probado la propiedad "defaultValue" y funciona. Esta es la función final luego de unos ajustes:

Cita:
function actualizar(id,cuenta,dir)
{
montoOriginal=document.getElementById(id).defaultV alue;
campoMonto=document.getElementById(id);

if(confirm("El monto ha sido modificado. ¿Desea hacer permamente este cambio?."))
{
montoNuevo=document.getElementById(id).value;
//procedimientos adicionales
}
else
{campoMonto.value = montoOriginal;}
}
</script>
Muchas gracias a ambos, de verdad me dieron un respiro, porque mi fuerte no es precisamente javascript.


Un saludo y gratitud sincera desde Lima, Perú
Bendiciones

Etiquetas: txt, campos
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 06:15.