Foros del Web » Programando para Internet » Javascript »

Urgente ayuda sobre creacion de text fields adicionales con js

Estas en el tema de Urgente ayuda sobre creacion de text fields adicionales con js en el foro de Javascript en Foros del Web. Amigos puse este código que funciona excelente con IE, pero no pasa nada con Firefox : Se supone que al hacer click en el bottón ...
  #1 (permalink)  
Antiguo 12/08/2009, 11:01
 
Fecha de Ingreso: febrero-2008
Mensajes: 409
Antigüedad: 16 años, 2 meses
Puntos: 2
Pregunta Urgente ayuda sobre creacion de text fields adicionales con js

Amigos puse este código que funciona excelente con IE, pero no pasa nada con Firefox :

Se supone que al hacer click en el bottón "(+) Aumenta un campo de texto" éste me debería añadir más campos , tanto en IE como en Firefox lo hace, pero a diferencia de IE, en Firefox elimina los valores de los anteriores text fields en caso de que ya haya escrito algo dentro de ellos.... por qué señor por qué ???


<script language="javascript">

$nummaxrooms=1;
fields = 0;
function addInput() {
if (fields <= 5)
{
document.getElementById('text').innerHTML += "<br>Room type name : <input type='text' name='roomtypename"+fields+"' class='style10'/> Quantity : <input type='text' name='roomqty"+fields+"' class='style10' size='9'/> Rack Price us$: <input type='text' name='roomrackprice"+fields+"' class='style10' size='9'/><br>";
fields += 1;
}
else
{
alert("Sólo se pueden 5 registros.");
document.form.add.disabled=true;return;
}

}

//
//... y en el body (formulario) el botón es :
//

<input type="button" onclick="addInput()" name="add" value="(+) Aumenta un campo de texto" />



Alguna ayuda por favor ?
  #2 (permalink)  
Antiguo 12/08/2009, 12:24
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

sucede que los campos no tienen un valor predeterminado. de modo que cuando usas innerHTML este toma la fuente original y la vuelve a escribir en el documento. o sea, lo que el usuario escribe no queda grabado en el atributo value. para comprobarlo, intenta tomar el valor con el metodo getAttribute("value"), veras que te devuelve un string vacio independientemente lo que el usuario escribio. la solucion es simplemente usar metodos del DOM para crear los elementos en lugar de innerHTML.

Código:
<script language="javascript">
$nummaxrooms=1;
fields = 0;
function addInput() {
if (fields < 5){
var target = document.getElementById('text');
var p = document.createElement("p");

p.appendChild(setText("Room type name: "));
p.appendChild(setInput("text", "roomtypename"+fields, "style10"));
p.appendChild(setText("Quantity: "));
p.appendChild(setInput("text", "roomqty"+fields, "style10"));
p.appendChild(setText("Rack Price us$: "));
p.appendChild(setInput("text", "roomrackprice"+fields, "style10"));
target.appendChild(p);
fields++;
}else{
alert("Sólo se pueden 5 registros.");
document.form.add.disabled=true;return;
}

function setText(text){
return document.createTextNode(text);
}

function setInput(type, name, classname){
var input = document.createElement("input");
input.setAttribute("type", type);
input.setAttribute("name", name);
input.className = classname;
return input;
}
}

</script>
<input type="button" onclick="addInput()" name="add" value="(+) Aumenta un campo de texto" />
<p id="text"></p>
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 12/08/2009 a las 20:55 Razón: corrigiendo el codigo
  #3 (permalink)  
Antiguo 12/08/2009, 18:19
 
Fecha de Ingreso: febrero-2008
Mensajes: 409
Antigüedad: 16 años, 2 meses
Puntos: 2
Exclamación Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

Amigo mio: usé el codigo que me diste pero tengo 2 errores :

el primero (apenas cargo la pagina) es :

"expected identifier"

y la otra sucede cada vez que hago click en el boton "Add"

que puede estar faltando ??? agradecere tu respuesta, saludos,
  #4 (permalink)  
Antiguo 12/08/2009, 19:54
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

curioso, en Fx me funciona perfecto y no lo habia verificado en iexplorer. en todo caso, es el error es porque utilice una palabra reservada en la funcion setInput, class. simplemente cambia el nombe del argumento.

Código:
function setInput(type, name, classname){
var input = document.createElement("input");
input.setAttribute("type", type);
input.setAttribute("name", name);
input.className = classname;
return input;
}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 12/08/2009, 20:37
 
Fecha de Ingreso: febrero-2008
Mensajes: 409
Antigüedad: 16 años, 2 meses
Puntos: 2
Exclamación Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

Zero killed :


mira, ahora ya cambié y funciona la parte de crear nuevos campos de "textfield", pero sigue con el tema de que si tu rellenas los campos y luego sigues presionando el boton "add" aumenta un nuevo text field pero borra los valores que estaban escritos en los anteriores . en otras palabras , si sigues estos pasos :

1) crea 2 campos de texto
2) rellenalos con cualquier texto
3) aumenta (add) un campo de texto más
4) ERROR ---> aumentará, pero lo que se rellenó en el punto 2 se borró con esto.

Es precisamente lo que quiero evitar... puedes probarlo asi ?
  #6 (permalink)  
Antiguo 12/08/2009, 20:45
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

!¿en serio?! a mi no me sucede eso, aun siguiendo tus pasos. me funciona en iexplorer 7 y Fx 3.5.2 ¿no estaras probando alguna version antigua? o bien limpia la cache del navegador, no sea que este cargando desde la cache un archivo antiguo. presiona CTRL + F5 para obligar al navegador cargar los archivos desde la fuente original. te aseguro que el DOM no interfiere con los campos creados.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 12/08/2009, 20:47
 
Fecha de Ingreso: febrero-2008
Mensajes: 409
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

ohh perdon... refresqué mal mi pagina... ahora corre maravillosamente bien ! muchas gracias !
  #8 (permalink)  
Antiguo 12/08/2009, 21:23
 
Fecha de Ingreso: febrero-2008
Mensajes: 409
Antigüedad: 16 años, 2 meses
Puntos: 2
Pregunta Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

Una pregunta adicional... y que pasaria si tambipen quiero definir el atributo "size" para los campos de texto ? es decir ponerles por ejemplo un tamaño de 20 al primero y de 9 a los dos siguientes ? ... te agradezco,
  #9 (permalink)  
Antiguo 12/08/2009, 21:52
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

no pasaria nada, simplemente hay que añadirlos tienes que agregar una linea a la funcion setInput.
Código:
function setInput(type, name, classname, size){
var input = document.createElement("input");
input.setAttribute("type", type);
input.setAttribute("name", name);
input.setAttribute("size", size);
input.className = classname;
return input;
}
ahora, cada vez que llamas a la funcion tienes que incluir el ultimo parametro size. un ejemplo
Código:
p.appendChild(setInput("text", "roomtypename"+fields, "style10", "20"));
p.appendChild(setInput("text", "roomqty"+fields, "style10", "9"));
p.appendChild(setInput("text", "roomrackprice"+fields, "style10", "9"));
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 12/08/2009 a las 22:07
  #10 (permalink)  
Antiguo 13/08/2009, 12:04
 
Fecha de Ingreso: febrero-2008
Mensajes: 409
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

excelente ! lo habia pensado asi ylo hice antes pero no me salia porque ponia el "Size " antes de "class"... habrá algun motivo especial ? bueno.. no imporat quizas ya , porque funciona... gracias !
  #11 (permalink)  
Antiguo 13/08/2009, 12:08
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

el orden no tiene mucha relevancia, pudo haberse ubicado en la primera linea o despues de classname. lo unico importante es que todas las lineas deben estar antes del return.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #12 (permalink)  
Antiguo 18/08/2009, 00:09
 
Fecha de Ingreso: febrero-2008
Mensajes: 409
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

Cita:
Iniciado por zerokilled Ver Mensaje
el orden no tiene mucha relevancia, pudo haberse ubicado en la primera linea o despues de classname. lo unico importante es que todas las lineas deben estar antes del return.
Zero illed : una pregunta, cómo hago para hacer una sumatoria de los valores de estos nodos creados ? estoy probando con :

for (k=0;k<=5;k++)
{
$sumando_room=document.form."roomtypename"+k.value ;
$suma=$suma+$sumando_room;
}

pero me bota error...
  #13 (permalink)  
Antiguo 18/08/2009, 01:11
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

cuando tu quieras utilizar una variable como parte del nombre de una propiedad, metodos u objeto tienes que utilizar sintaxis un tanto diferente a la de punto. realmente no es nada nuevo en el lenguaje, es simplemente tratar el objeto como si fuera un array. si! cualquier objeto puede utilizarse de esa forma. luego, dentro de los corchetes poner el nombre junto con la variable. por tanto...
Código:
// la siguiente linea;
$sumando_room=document.form."roomtypename"+k.value ;

// se transforma a;
$sumando_room=document.form["roomtypename"+k].value ;
por ultimo, considera que cualquier valor leido desde un elemento HTML se tratan como un string, independientemente del contenido. en tu caso estas leyendo la propiedad value el cual tienes que convertir el valor a numerico antes de operar con el.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #14 (permalink)  
Antiguo 18/08/2009, 09:20
 
Fecha de Ingreso: febrero-2008
Mensajes: 409
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

Gracias. Cambié la linea, pero cuando corro elprograma me sale un error del tipo :

" document.form["roomtypename"+k].value" is null or not an object "

qué puede estar pasando ?
  #15 (permalink)  
Antiguo 18/08/2009, 11:29
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Urgente ayuda sobre creacion de text fields adicionales con js

en el codigo no le veo nada mal. quiero decir, error de sintaxis no es. debe ser que las referencias no estan correctas. asegurate de que los inputs creados esten dentro del formulario, de lo contrario no te va a funcionar. tambien asegurate que el nombre utilizado en document.form sea el correcto.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
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 18:16.