Foros del Web » Programando para Internet » Javascript »

no me da alert y envia el formulario

Estas en el tema de no me da alert y envia el formulario en el foro de Javascript en Foros del Web. en este codigo lo que quiere es que valida las fechas, pero pasa de largo y ejecuta el submit de inmediato: Código PHP: < input type ...
  #1 (permalink)  
Antiguo 09/04/2013, 12:24
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 15 años, 4 meses
Puntos: 2
Exclamación no me da alert y envia el formulario

en este codigo lo que quiere es que valida las fechas, pero pasa de largo y ejecuta el submit de inmediato:
Código PHP:
<input type='button' value='Buscar' class='boton' onclick="if(Date.parse(document.ff.fechaini.value) < Date.parse(document.ff.fechafin.value)) { alert('Fecha Inicio no puede ser mayor que fecha final');} else { document.ff.submit(); }" /> 
tengo el plugin de firebug instalado pero no me arroja error alguien que me pueda ayudar.
  #2 (permalink)  
Antiguo 09/04/2013, 12:58
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: no me da alert y envia el formulario

no todos los navegadores aceptan las referencias directas, cambie:

document.ff.fechaini.value

por su forma crossbrowser:
Código Javascript:
Ver original
  1. document.forms['ff'].elements['fechaini'].value
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 09/04/2013, 13:09
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: no me da alert y envia el formulario

Creo que si fuera ese el problema hubiera sacado por lo menos un error "undefined", así que lo que se me hace es que tienes que cancelar el envío, por ejemplo con un return false, o mejor un preventDefault().

Saludos
__________________
Grupo Telegram Docker en Español
  #4 (permalink)  
Antiguo 09/04/2013, 14:45
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 15 años, 4 meses
Puntos: 2
Exclamación Respuesta: no me da alert y envia el formulario

cambie a la referencia d elos elementos pero aun asi, sigue enviando directamente el formulario, le agregue el return false, pero igual
Código PHP:
<input type='button' value='Buscar' class='boton' onclick="if(Date.parse(document.forms['ff'].elements['fechaini'].value) < Date.parse(document.forms['ff'].elements['fechafin'].value)) { alert('Fecha Inicio no puede ser mayor que fecha final'); return false;} else { document.ff.submit(); }" /> 
  #5 (permalink)  
Antiguo 09/04/2013, 15:54
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 15 años, 4 meses
Puntos: 2
De acuerdo Respuesta: no me da alert y envia el formulario

encontre un script que arroja mensajes de alerta si la fecha es mayor o menor, solo cambie la ultima linea para indicar que si la fecha de fin es menor o igual a la fecha de inicio envia el formulario:
script en documento php:
Código PHP:
<input type='button' value='Buscar' class='boton' onclick="if (verificarfecha(document.forms['ff'].elements['fechaini'].value,document.forms['ff'].elements['fechafin'].value)){alert('Hasta, debe ser menor o igual a Desde');}else{return true;}" /> 
script js con la funcion
Código:
function verificarfecha(fecha,fecha2)
{
	var xMonth=fecha.substring(3, 5);  
	var xDay=fecha.substring(0, 2);  
	var xYear=fecha.substring(6,10);  
	var yMonth=fecha2.substring(3, 5);  
	var yDay=fecha2.substring(0, 2);  
	var yYear=fecha2.substring(6,10);  
	if (xYear> yYear)  
		{  
			return(true)  
		}  
	else  
		{  
			if (xYear == yYear)  
			{   
				if (xMonth> yMonth)  
				{  
					return(true)  
				}  
				else  
				{   
					if (xMonth == yMonth)  
					{  
						if (xDay> yDay)  
							return(true);  
						else  
							document.forms['ff'].submit();  
					}  
					else  
						return(false);  
				}  
			}  
			else  
				return(false);  
		}
}
por si a alguien tampoco le funko la 1era funcion de javascript
  #6 (permalink)  
Antiguo 09/04/2013, 21:18
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: no me da alert y envia el formulario

Estás haciendo algo un poco confuso, lo primero es identificar correctamente los elementos del formulario, segundo utilizar una función que te permita comparar fecha de inicio y fecha final. Por último, utilizar un botón submit, que para eso está.

En tu caso si el form se te envía de todas formas es que la comparación no es correcta, ya que un input type button no hace el submit de un form (solo un type submit y la etiqueta <button> realizan tal acción.

No me queda claro si tu ultima función te fucniona o no para la validación. En todo caso deberías poner el formulario completo.

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 10/04/2013, 08:59
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: no me da alert y envia el formulario

este es mi formulario completo; tiene tanto php y la sentencia de validacion esta en javascript; no veo como puede variar eso, pero ahi lo mando:
Código PHP:
<?
session_start
();
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0"false);
header("Pragma: no-cache");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT"); 
require_once(
"config/config.php");
require_once(
"include/clasesmysql.php");
require_once(
"include/class.tree.php");
$miconexion = new DB_mysql ;
$miconexion->conectar($basededatos$host$usuario_bd,$contrasena_bd);
if (
$_GET['opcion']=="buscar")
    {
        
$pagina=$_GET['pagina'];
        if(
$pagina=='registro_compras')
            
$a=array(    
            
"n_doc" => "Numero_Comprobante",    
            
"fecha_emi" => "Fecha_Emision"        
            
);
        if(
$pagina=='registro_ventas')
            
$a=array(    
            
"numero" => "Numero_Comprobante",    
            
"fec_emi" => "Fecha_Emision"        
            
);

        
$filtro=$_GET['filtro'];
        
$valor=$_GET['valor'];
    echo
"<form action='$paginaprincipal?menu2=$pagina' method='get' name='ff' id='ff'><B>Buscar Por:</B><select name='filtro' class='select'>";
    echo 
"<option value=''>[Seleccione Opcion]</option>";
    foreach(
$a as $k => $v
    {
    echo
"<option value='$k' onclick=\"enviaQuery('filtrando','myajaxpicker.php?opcion=$k');\">$v</option>";
    }    
    echo
"</select>&nbsp;&nbsp;<div id='filtrando'></div><input type='hidden' name='menu2' value='$pagina'>";    
    echo
"</form>";
    }

if(
$_GET['opcion']=="fecha_emi")
{
    echo 
"    <label for='from'>Desde</label><input type='text' name='fechaini' id='fechaini' onFocus=\"if(this.value=='dd-mm-aaaa')this.value='';\" onKeyUp = \"this.value=formateafecha(this.value);\"/>
            <label for='to'>Hasta</label><input type='text' id='fechafin' name='fechafin' onFocus=\"if(this.value=='dd-mm-aaaa')this.value='';\" onKeyUp = \"this.value=formateafecha(this.value);\"/>
            &nbsp;&nbsp;&nbsp;"
;
            
?>
            <input type='button' value='Buscar' class='boton' onclick="if (verificarfecha(document.forms['ff'].elements['fechaini'].value,document.forms['ff'].elements['fechafin'].value)){alert('Hasta, debe ser menor o igual a Desde');}else{return true;}" />
<?php
}

if(
$_GET['opcion']=="fec_emi")
{
    echo 
"    <label for='from'>Desde</label><input type='text' name='fechaini' id='fechaini' onFocus=\"if(this.value=='dd-mm-aaaa')this.value='';\" onKeyUp = \"this.value=formateafecha(this.value);\"/>
            <label for='to'>Hasta</label><input type='text' id='fechafin' name='fechafin' onFocus=\"if(this.value=='dd-mm-aaaa')this.value='';\" onKeyUp = \"this.value=formateafecha(this.value);\"/>
            &nbsp;&nbsp;&nbsp;"
;
            
?>
            <input type='button' value='Buscar' class='boton' onclick="if (verificarfecha(document.forms['ff'].elements['fechaini'].value,document.forms['ff'].elements['fechafin'].value)){alert('Hasta, debe ser menor o igual a Desde');}else{return true;}" />
            <?php
}

if(
$_GET['opcion']=="n_doc")
{
    echo 
"<input type='text' class='form' name='valor' size='15'></input>&nbsp;&nbsp;<input type='submit' value='Buscar' class='boton'>";
}

if(
$_GET['opcion']=="numero")
{
    echo 
"<input type='text' class='form' name='valor' size='15'></input>&nbsp;&nbsp;<input type='submit' value='Buscar' class='boton'>";
}
?>
  #8 (permalink)  
Antiguo 10/04/2013, 15:20
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: no me da alert y envia el formulario

estamos suponiendo que tu script identifica correctamente los campos, pero eso no es un hecho si no conocemos el código del form, y NO necesitamos tu php, solo el código html generado correspondiente al form.

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #9 (permalink)  
Antiguo 10/04/2013, 15:31
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: no me da alert y envia el formulario

Cita:
Iniciado por emprear Ver Mensaje
estamos suponiendo que tu script identifica correctamente los campos, pero eso no es un hecho si no conocemos el código del form, y NO necesitamos tu php, solo el código html generado correspondiente al form.

Saludos
este es mi html que me llama a mi archivo php antes mencionado:
Código HTML:
<script language='javascript'>
		<!--
		function seleccionar_todo()
		{ 
   for (i=0;i<document.f1.elements.length;i++) 
      if(document.f1.elements[i].type == "checkbox") 
         document.f1.elements[i].checked=1 
		} 
		function deseleccionar_todo()
		{ 
		for (i=0;i<document.f1.elements.length;i++) 
      if(document.f1.elements[i].type == "checkbox") 
         document.f1.elements[i].checked=0 
		} 
		//-->
</script>

<script type='text/javascript'>
function formateafecha(fecha) 
{ 
	var long = fecha.length; 
	var dia; 
	var mes; 
	var ano; 

	if ((long>=2) && (primerslap==false)) { dia=fecha.substr(0,2); 
	if ((IsNumeric(dia)==true) && (dia<=31) && (dia!="00")) { fecha=fecha.substr(0,2)+"-"+fecha.substr(3,7); primerslap=true; } 
	else { fecha=""; primerslap=false;} 
	} 
	else 
	{ dia=fecha.substr(0,1); 
	if (IsNumeric(dia)==false) 
	{fecha="";} 
	if ((long<=2) && (primerslap=true)) {fecha=fecha.substr(0,1); primerslap=false; } 
	} 
	if ((long>=5) && (segundoslap==false)) 
	{ mes=fecha.substr(3,2); 
	if ((IsNumeric(mes)==true) &&(mes<=12) && (mes!="00")) { fecha=fecha.substr(0,5)+"-"+fecha.substr(6,4); segundoslap=true; } 
	else { fecha=fecha.substr(0,3);; segundoslap=false;} 
	} 
	else { if ((long<=5) && (segundoslap=true)) { fecha=fecha.substr(0,4); segundoslap=false; } } 
	if (long>=7) 
	{ ano=fecha.substr(6,4); 
	if (IsNumeric(ano)==false) { fecha=fecha.substr(0,6); } 
	else { if (long==10){ if ((ano==0) || (ano<1900) || (ano>2100)) { fecha=fecha.substr(0,6); } } } 
	} 

	if (long>=10) 
	{ 
	fecha=fecha.substr(0,10); 
	dia=fecha.substr(0,2); 
	mes=fecha.substr(3,2); 
	ano=fecha.substr(6,4); 
	// Año no viciesto y es febrero y el dia es mayor a 28 
	if ( (ano%4 != 0) && (mes ==02) && (dia > 28) ) { fecha=fecha.substr(0,2)+"/"; } 
	} 
	return (fecha); 
}
</script>

<br /><br />
<div align='left' style="font-family:Arial;color:red;size:8px;text-align:justify;">*Nota: La exportacion para SUNAT se hace del mes anterior al ejercicio actual. Filtrar por Fecha para Mostrar el Boton de Exportaci&oacute;n</div>
<br /><br />
<div align='center' class='titulo1'>REGISTRO DE COMPRAS</div>
<br /><br />
<div align='left'>
<a href="javascript:;" value='Nuevo Registro de Compras' onclick=
"Modalbox.show('nuevo_registro_compras.php', {title: 'Nuevo Registro de Compra', width: 800, height:600, loadingString:'Espere Inversiones Rimay', closeString:'Gracias. Inversiones Rimay'}); return false;"><img src='images/btnregistro.jpg' alt='Nuevo Registro Compra' border='0'></a>
&nbsp;&nbsp;<a href="javascript:;" value='Buscar Registro de Compra' onclick="enviaQuery('divResultado','myajaxpicker.php?opcion=buscar&pagina=registro_compras');"><img src='images/btnbuscaregistro.jpg' alt='Buscar Registro de Compra' border='0'></a>&nbsp;&nbsp;
<?php if ($_GET['filtro']) { ?>
<a href="http://invrimay.com/sistema_contable/registro_comprasexporto.php?filtro=<?php echo $_GET["filtro"];?>&valor=<?php echo $_GET['valor'];?>&fechaini=<?php echo $_GET['fechaini'];?>&fechafin=<?php echo $_GET['fechafin'];?>" value="Exportar a TXT"><img src='images/exporto.png' alt='Exportar' border='0' /></a>
<?php } ?>
</div>
<div id='divResultado' align='center'></div>
<div id="seleccion"> 
  #10 (permalink)  
Antiguo 10/04/2013, 17:02
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: no me da alert y envia el formulario

Seguimos en la misma, porque seguimos con el php,
en concreto, para verificar fechas de inicio y fin (llegada/partida típicas de sistemas de reserva

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <html lang="es-ar">
  3. <meta charset="utf-8" />
  4. <title>Llegada-Partida</title>
  5. <style type="text/css">
  6. /*<![CDATA[*/
  7. label{
  8. display: inline-block;
  9. width: 120px;
  10. }
  11. /*]]>*/
  12. <script type="text/javascript">
  13. //<![CDATA[
  14. function difDias(fechaA, fechaB) {
  15. return Math.round(Math.abs(fechaA.getTime() - fechaB.getTime())/(1000 * 60 * 60 * 24))
  16. }
  17.  
  18. function diferenciaFecha(){
  19.  
  20. var f1 = document.getElementById('fecha_uno').value.split("/");
  21. var d1 = new Date(f1[2],f1[1]-1,f1[0]);
  22. var f2 = document.getElementById('fecha_dos').value.split("/");
  23. var d2 = new Date(f2[2],f2[1]-1,f2[0]);
  24.  
  25. if(fechaValida(f1[2],parseInt(f1[1]),parseInt(f1[0])) == false){
  26. return false;
  27. }
  28. if(fechaValida(f2[2],parseInt(f2[1]),parseInt(f2[0])) == false){
  29. alert('Ingrese una fecha de partida válida, día, mes y año');
  30. return false;
  31. }
  32. var dif = d2.getTime()-d1.getTime();
  33. if(dif < 0){
  34. alert('El día de llegada no puede ser mayor que el de partida');
  35. return false;
  36. }
  37. alert('Enviando el form...')
  38. }
  39.  
  40.  
  41. function fechaValida(y,m,d){
  42. var fecha = new Date(y,m-1,d);
  43. var convertirFecha = ""+fecha.getFullYear() + (fecha.getMonth()+1) + fecha.getDate();
  44. var fechaDada = "" + y + m + d;
  45. return ( fechaDada == convertirFecha);
  46. }
  47.  
  48. //]]>
  49. </head>
  50. <form action="procesa.php" onsubmit="return diferenciaFecha();">
  51. <p>
  52. <label for="fecha_uno">Llegada</label> <input type="text" id="fecha_uno" /> dd/mm/aaaa<br />
  53. <label for="fecha_dos">Partida</label> <input type="text" id="fecha_dos" /> dd/mm/aaaa<br />
  54. <input type="submit" value="Verificar" />
  55. </p>
  56. </form>
  57. </body>
  58. </html>

Y desde yá. esta validación, para ser efectiva, debe realizarse en el servidor
un ejemplo
http://foros.emprear.com/php/demo-form-ajax-captcha/

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: envia, formulario, input
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 15:12.