Foros del Web » Programando para Internet » Javascript »

Problema con Submit y Reset en los forms

Estas en el tema de Problema con Submit y Reset en los forms en el foro de Javascript en Foros del Web. Estoy con un proyecto en la universidad que nos mandaron hacer en html css y javascript. Se trabaja todo en memoria y no con base ...
  #1 (permalink)  
Antiguo 25/11/2009, 11:41
Avatar de HostOnePlus  
Fecha de Ingreso: noviembre-2009
Mensajes: 196
Antigüedad: 14 años, 5 meses
Puntos: 1
Problema con Submit y Reset en los forms

Estoy con un proyecto en la universidad que nos mandaron hacer en html css y javascript.

Se trabaja todo en memoria y no con base de datos.

Tengo el formulario hecho de la siguiente manera:

Código HTML:
<p id="formulario"> 
	<span id="asterisco">(*)</span> Nombre: <br />
	<input type='text' id='nombre' onChange='pasoMayusculas(this)'> <br />
	<span id="asterisco">(*)</span> Cantidad de Empleados: <br />
	<input type='text' value='0' MAXLENGTH='4' id='cantEmpleados'> <br />
	<span id="asterisco">(*)</span> Hora de Inicio de Actividades:<br />
	<input type='text' value='0' MAXLENGTH='2' id='horaInicio'> hrs. <br />
	<span id="asterisco">(*)</span> Hora de Cierre de Actividades:<br />
	<input type='text' value='0' MAXLENGTH='2' id='horaFin'> hrs. <br />
	<br />
	<input type='Submit' value='Registrar' onClick='altaEmpresa()'/>
	<input type='Reset' value='Reiniciar'/>	

</p> <!--- registro empresa---> 
Nosotros en la universidad en los practicos siempre lo haciamos de esta manera, no usabamos los <form> </form>.

El tema es que ahora si no agrego el <form> </form> los botones de submit y reset no me funcionan.

Si agregó funcionan pero no hacen lo que les pido.

Es el head tengo:

Código HTML:
<script language = "javascript" src = "js/empresa.js"></script>
	<script language = "javascript" src = "js/aeropuerto.js"></script>
	<script language = "javascript">
		// Instancio 
		miAeropuerto = new Aeropuerto();
		
		// Convierto Nombre en Mayuscula
		function pasoMayusculas(campo) {
            campo.value = campo.value.toUpperCase()
		}
		
		// Funcion para dar de alta la empresa.
		function altaEmpresa(){
			miEmpresa = new Empresa();
			miEmpresa.setNombre(document.getElementById("nombre").value);
			miEmpresa.setCantEmpleados(document.getElementById("cantEmpleados").value);
			miEmpresa.setHoraInicio(document.getElementById("horaInicio").value);
			miEmpresa.setHoraFin(document.getElementById("horaFin").value);
			miAeropuerto.AgregarEmpresa(miEmpresa);
			if (AgregarEmpresa(miEmpresa)){
				alert("Empresa registrada con exito");
			}
			else {
				alert("La empresa ya existe, re-ingrese por favor");
			}	
		}
Tomando en cuenta que el Aeropuerto tengo el array y el método para agregar Empresas:

Código HTML:
this.AgregarEmpresa = function(pEmpresa){
		var tempEmpresa = "";
		var pos = 0;
		var registro = false;
		while(pos <= this.mEmpresas.length-1 && (!registro)){
			tempEmpresa = this.mEmpresas[pos];
			if( tempEmpresa.getNombre() != pEmpresa.getNombre() ){
				
				 // Comprobé que el nombre de la empresa no está en uso, paso a agregar al array.
				
				this.mEmpresas.push(pEmpresa);
				registro = true;
			}
			pos++;
		}
		return registro;	
	}
Me devuelve un true o false en caso que se haya podido registrar.
Ese true o false es el que me ayuda después para lanzar el alert y avisar al operador si pudo o no registrar la empresa.

Si necesitan algun dato mas avisen.

Agreadesco toda a ayuda ya que tengo que terminar este obligatorio para la semana que viene. Con que me andé el formulario de empresa me servirá para terminar los otros.

Muchas gracias!

Saludos,
  #2 (permalink)  
Antiguo 25/11/2009, 23: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: Problema con Submit y Reset en los forms

comprendo tu tema parcialmente. me explico, ¿cual es el proposito de los botones submit y reset? no estoy claro si quieres enviar los datos o si solo los quieres como controles para manejar tu aplicacion. me parece que es este ultimo. en ese caso, no es necesario incluir las etiquetas <form></form> como lo has estado haciendo hasta ahora. pero al menos el boton reset y submit por obligacion necesitan de dichas etiquetas porque ellas operan directamente sobre un formulario. ¿que puedes hacer? tienes dos opciones, incluyes las etiquetas <form></form> para que reset pueda funcionar adecuadamente, o haces tus propios codigos para vaciar los campos.

a mi juicio, el mas facil y corto es el primero, incluir <form></form>. luego, en lugar de usar boton submit, simplemente usa un boton normal tipo button porque lo que realmente te interesa es invocar la funcion, no es enviar los datos.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 25/11/2009, 23:23
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Problema con Submit y Reset en los forms

Hola:

Otro par de cosillas... Si no tienes un formulario y/o un action para enviar datos, es absurdo que uses un botón submit...
Teniendo un botón submit, siempre se puede cancelar el envío con el manejador del propio evento: <form onsubmit="return false"...
Y por último, en el action también puedes ejecutar un script (al igual que en el href de los enlaces) anteponiendo el [pseudo] protiocolo javescript:

<form action="javascript:altaEmpresa()"...

Saludos

Y por cierto, el reset (evento o botón), no limpia el formulario, sino los deja en el estado inicial (lo que tenga cada value al iniciarse)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 26/11/2009, 11:02
Avatar de HostOnePlus  
Fecha de Ingreso: noviembre-2009
Mensajes: 196
Antigüedad: 14 años, 5 meses
Puntos: 1
Respuesta: Problema con Submit y Reset en los forms

Muchisimas gracias muchachos!

La verdad sin palabras.

Voy a probar sus opciones y cualquier cosa les aviso!

Tengo que terminar esto antes del Jueves sino no me gano el derecho a Examen!

Saludos!
  #5 (permalink)  
Antiguo 29/11/2009, 19:56
Avatar de HostOnePlus  
Fecha de Ingreso: noviembre-2009
Mensajes: 196
Antigüedad: 14 años, 5 meses
Puntos: 1
Respuesta: Problema con Submit y Reset en los forms

Me siguen sin funcionar ahora me salta siempre el mensaje de que la empresa ya está registrada, aunque sea la primera vez que agrego.

Por lo que verifique con el FireBug el error está aquí:

Código HTML:
miEmpresa.setNombre(document.getElementById("nombre").value);
Que recibe los datos de aquí:

Código HTML:
<input type="text" id="nombre" onChange="pasoMayusculas(this)"> <br /> 
Y el método:

Código HTML:
this.setNombre = function(pNombre){
		this.mNombre = pNombre.toUpperCase();
	}
	this.getNombre = function(){
		return this.mNombre;
}
El método para agregar y verificar empresas:

Código HTML:
this.AgregarEmpresa = function(pEmpresa){
		var tempEmpresa = "";
		var pos = 0;
		var registro = false;
		while(pos <= this.mEmpresas.length-1 && (registro == false)){
			temEmpresa = this.mEmpresas[pos];
			if( temEmpresa.getNombre() != pEmpresa.getNombre() ){
				
				 // Comprobé que el nombre de la empresa no está en uso, paso a agregar al array.
				
				this.mEmpresas.push(pEmpresa);
				registro = true;
			}
			pos++;
		}
		return registro;	
	}
}
Cualquier ayudita les agradeceria mucho ya que la verdad, hize 50 cambios y me sigue sin funcionar!!

Saludos!
  #6 (permalink)  
Antiguo 30/11/2009, 04:37
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: Problema con Submit y Reset en los forms

no creo que tu problema es donde lo indicas. tu problema esta en dos lugares: la invocacion de agregar la empresa y la logistica de determinar si la empresa ya esta registrada. en el primer caso tu indicas que agregarEmpresa es un metodo de la clase Aeropuerto. sin embargo, ¿donde esta la instancia de tu objeto?
Código:
			if (???.AgregarEmpresa(miEmpresa)){
				alert("Empresa registrada con exito");
			}
en el segundo error, logisitca para determinar empresa registrada. en un inicio si el array esta vacio, quiere decir que tiene longitud de cero pero mira lo que has hecho en tus condiciones del bucle.
Código:
		while(pos <= this.mEmpresas.length-1 && (registro == false)){
// se traduce como 0 <= -1 de modo que simpre devuelve falso;
lo segundo es la forma que comparas los nombres de las empresas. supongamos que el array contiene dos empresas registradas: "X" y "Y". el numero no importa pero de momento usaremos dos. si se intenta registrar la empresa "Z", veamos como se interpreta segun tu codigo.
Código:
if( temEmpresa.getNombre() != pEmpresa.getNombre() ){
si "X" no es igual a "Z", resulta como cierto porque ambos valores no son iguales. por tanto se procede a registrar la empresa y se cancela el bucle. pero digamos que esta vez queremos registrar de nuevo la empresa "Z". en el array ahora tenemos "X", "Y", "Z". cuando vuelve y se compara con el primero, vuelve a dar cierto como en el ejemplo anterior. el problema es que no estas verificando la nueva empresa con todos los valores del array, sino que solamente con el primero. y si ese primero resulta ser iguales, por ejemplo "X" no es igual que "X" devuelve falso, entonces la segunda comparacion dara cierto puesto que "Y" no es igual que "X".
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 30/11/2009, 08:10
Avatar de HostOnePlus  
Fecha de Ingreso: noviembre-2009
Mensajes: 196
Antigüedad: 14 años, 5 meses
Puntos: 1
Respuesta: Problema con Submit y Reset en los forms

Cita:
¿donde esta la instancia de tu objeto?
Listo ya lo modifiqué!

Cita:
el problema es que no estas verificando la nueva empresa con todos los valores del array


Comparo solamente por el nombre con las demás empresas.
Yo usaba un for para recorrer el array, pero el Profesor nos dijo de no usar un for ya que el for sigue trabajando aunque haya encontrado que la empresa o lo que sea esté repetido, entonces nos dio esa manera para recorrer el array y que si encuentra ya de primera que está repetido que rompa, y no siga buscando.


Ahora el Agregar empresa lo deje de está manera:

Código HTML:
this.AgregarEmpresa = function(pEmpresa){
		var tempEmpresa = "";
		var pos = 0;
		var registro = false;
		
		if(this.mEmpresas == null){
		
		// Si el array está vacio, agregó la empresa sin verificar.	
			
			this.mEmpresas.push(pEmpresa);
			registro = true;
		}
		else{
		
		//Si no está vacio paso a verificar
		
			while(pos <= this.mEmpresas.length-1 && (registro == false)){
				temEmpresa = this.mEmpresas[pos];
				if( temEmpresa.getNombre() != pEmpresa.getNombre() ){
					
					 // Comprobé que el nombre de la empresa no está en uso, paso a agregar al array.
					
					this.mEmpresas.push(pEmpresa);
					registro = true;
				}
				pos++;
			}
		}
		return registro;	
	}
}
Es decir que si el Array está vacio, que lo agregué de primera, que no busque.
De lo contrario que busque.

Pero igual me sigue largando el mensaje de

Cita:
alert("La empresa ya existe, re-ingrese por favor");
Y así tengo mi <head> Ahora:

Código HTML:
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Registro de Empresa - Aeropuerto Internacional de Carrasco</title>
    <link rel="STYLESHEET" type="text/css" href="css/estilo.css"/>
	<script language = "javascript" src = "js/empresa.js"></script>
	<script language = "javascript" src = "js/aeropuerto.js"></script>
	<script language = "javascript" src = "js/vuelo.js"></script>
	<script language = "javascript" src = "js/aerolinea.js"></script>
	<script language = "javascript">
		// Instancio 
		miAeropuerto = new Aeropuerto();
		miEmpresa = new Empresa();
		miVuelo = new Vuelo();
		//miAerolinea = new Aerolinea();
		
		// Convierto Nombre en Mayuscula
		function pasoMayusculas(campo) {
            campo.value = campo.value.toUpperCase();
		}
		
		// Funcion para dar de alta la empresa.
		function altaEmpresa(){
			miEmpresa.setNombre(document.getElementById("nombre").value);
			miEmpresa.setCantEmpleados(document.getElementById("cantEmpleados").value);
			miEmpresa.setHoraInicio(document.getElementById("horaInicio").value);
			miEmpresa.setHoraFin(document.getElementById("horaFin").value);
			miAeropuerto.AgregarEmpresa(miEmpresa);
			if (miAeropuerto.AgregarEmpresa(miEmpresa) == true){
				alert("Empresa registrada con exito");
			}
			else {
				alert("La empresa ya existe, re-ingrese por favor");
			}	
		}
	</script>
</head> 
¿Qué estará pasando ahora?

Si quieres me pasas tu e-mail y te paso los archivos completos, asó te queda más cómodo.
La verdad es que se me está acabando el tiempo para la entrega, y estoy medio desesperado.

Saludos,
  #8 (permalink)  
Antiguo 30/11/2009, 08:41
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: Problema con Submit y Reset en los forms

Cita:
el Profesor nos dijo de no usar un for ya que el for sigue trabajando aunque haya encontrado que la empresa o lo que sea esté repetido
personalmente para mi no tiene relevancia el bucle que sea, puede ser while, for, o incluso un do/whie aunque con este ultimo hay que tener cuidado. los bucles se pueden controlar con break y continue, o incluso un return en el caso de estar dentro de una funcion. a continuacion una version reducida de mas o menos lo que tienes. lo unico que en lugar de agregar a un array, se muestra un alerta con una informacion de guia para que puedas analizar los valores actuales.
Código:
company = ['X', 'Y'];
var i = 0;
while(i < company.length){
if(company[i] != 'Y'){alert("no existe, pues se agrega\nIteracion acutal: " + i + "\nSe comparo con la empresa: " + company[i]); break;}
i++;
}
en este ejemplo se usa valores literales pero es solo como muestra para indicarte el error. fijate que el bucle no continua a pesar que "Y" en realidad ya esta en el array. dado que la primera condicion es cierta, se le instruye al bucle que debe detener la iteracion. mas interesante aun, cambia el string literal (color rojo en el codigo) por "X" y veras que cuando se compara con "Y" el codigo procede agregar la empresa "X" aunque realmente ya existe.

¿como yo lo haria? usando mas o menos el mismo ejemplo,
Código:
company = ['X', 'Y'];
var i = 0, isRegistered = false;
while(i < company.length){
if(company[i] == 'Z'){isRegistered = true; break;}
i++;
}
if(!isRegistered)alert("Se agrega en el array")
de nuevo aqui, cambia el string literal por uno de los valores del array. el alerta no se mostrara. el mismo ejemplo anterior pero con bucle for.
Código:
company = ['X', 'Y'];
for(var i = 0, isRegistered = false; i < company.length; i++){
if(company[i] == 'Z'){isRegistered = true; break;}
}
if(!isRegistered)alert("Se agrega en el array")
en ambos ejemplos notese que el alerta se muestra solo si no existe la empresa en el array.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 30/11/2009 a las 08:46
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 19:00.