Foros del Web » Programando para Internet » Javascript » Frameworks JS »

ejecutar fancybox despues del submit

Estas en el tema de ejecutar fancybox despues del submit en el foro de Frameworks JS en Foros del Web. hola por favor como podría ejecutar una función que carga un fancybox después de hacer el submit, via java script, ese java script ejecuta un ...
  #1 (permalink)  
Antiguo 28/07/2015, 12:59
 
Fecha de Ingreso: febrero-2007
Mensajes: 232
Antigüedad: 17 años, 8 meses
Puntos: 1
ejecutar fancybox despues del submit

hola por favor como podría ejecutar una función que carga un fancybox después de hacer el submit, via java script, ese java script ejecuta un insert a la bd vía php necesito que después de haber echo le envió o el insert cargue un fancybox con un mensaje de gracias, tengo este código pero no lo consigo.

Código PHP:
<script type="text/javascript">

    function 
Validar(){
    
    if(
document.fingreso.nombre.value == ""){
        
alert("Debe ingresar Nombre")
        
document.fingreso.nombre.focus()
        return
    }
    
    if(
document.fingreso.apellido.value == ""){
        
alert("Debe ingresar Apellidos")
        
document.fingreso.apellido.focus()
        return
    }
    
    if(
document.fingreso.dni.value == ""){
        
alert("Debe ingresar DNI")
        
document.fingreso.dni.focus()
        return
    }
    
        
document.fingreso.action "index.php"
        
document.fingreso.proceso.value "Registrar"
        
document.fingreso.submit()
    
        
    }


</script>
<script>

function mostrarGracias (){
          $("#modalGracias").show();
        $.fancybox({
        autoSize: true,
        scrolling: "no",
        href : "gracias.html",
        type: "iframe"
    });      
}    



    </script> 
  #2 (permalink)  
Antiguo 28/07/2015, 13:48
Avatar de GusGarsaky  
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 8 meses
Puntos: 2
Respuesta: ejecutar fancybox despues del submit

El código que has puesto explica tu consulta. Te dejo un ejemplo de lo que deberías hacer:

Código Javascript:
Ver original
  1. document.querySelector('#tuform').addEventListener('submit', function(e) {
  2.     e.preventDefault(); // previene el submit predeterminado
  3.  
  4.     // obtienes la info del formulario y la agregas al objeto
  5.     var data = {}
  6.     data['nombre'] = document.querySelector('#txtname');
  7.     data['apellido'] = document.querySelector('#txtlastname');
  8.     data['dni'] = document.querySelector('#txtdni');
  9.  
  10.     // envías los datos por AJAX
  11.     var xhr = new XMLHttpRequest();
  12.     // esta ruta es el destino de la petición
  13.     xhr.open('POST', 'ruta/al/script', true);
  14.     // habilita el envío de json
  15.     xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
  16.     xhr.onload = function() {
  17.         if(xhr.status == 200) {
  18.             $("#modalGracias").show();
  19.                        $.fancybox({
  20.                           autoSize: true,
  21.                           scrolling: "no",
  22.                           href : "gracias.html",
  23.                           type: "iframe"
  24.                        });      
  25.         } else {
  26.             // muestras el diálogo Error
  27.         }
  28.     }
  29.     // envías la info
  30.     xhr.send('info='+data);
  31. });

Para validar, puedes hacerlo por expresiones regulares. Por ejemplo, para validar un DNI de 8 dígitos:

Código HTML:
Ver original
  1. <input type="text" id="txtdni" pattern="^(?!\s*$)[0-9\s]{8}$" />

Última edición por GusGarsaky; 28/07/2015 a las 13:56
  #3 (permalink)  
Antiguo 28/07/2015, 14:15
 
Fecha de Ingreso: febrero-2007
Mensajes: 232
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: ejecutar fancybox despues del submit

Hola gracias por la respuesta, unas dudas, lo de validar por expresiones me queda claro, la pregunta es el código que dejas, es solo lo que debo poner, mi código anterior va o ya no utilizo el tuyo, y 2 me da un error en la consola addEventListener off null

te dejo el código del formulario también

Código PHP:
Ver original
  1. <form action="" method="post" name="fingreso" id="fingreso">
  2.                             <div class="caja_form">
  3.                               <h2>COMPLETA TUS DATOS
  4. PARA PODER PARTICIPAR</h2>
  5.                                     <p><input type="text" name="nombre" id="nombre" placeholder="Nombre"></p>
  6.                                     <p><input type="text" name="apellido" id="apellido" placeholder="Apellidos"></p>
  7.                                     <p><input type="text" name="dni" id="dni" placeholder="Número de DNI"></p>
  8.                                     <p><input type="button" name="button" id="btnOpenDialog" value="Regístrate!" onClick="javascript:Validar();" class=" boton">
  9.                                     </p>
  10.                                      <input name="codcampana" type="hidden" id="codcampana" value="<?php echo $codcampana; ?>">
  11.                                     <input type="hidden" name="proceso" id="proceso" />
  #4 (permalink)  
Antiguo 28/07/2015, 15:32
 
Fecha de Ingreso: febrero-2007
Mensajes: 232
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: ejecutar fancybox despues del submit

no me esta funcionando o no se como aplicarlo
  #5 (permalink)  
Antiguo 28/07/2015, 16:40
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: ejecutar fancybox despues del submit

Por el mensaje de error, supongo que no reemplazaste el id del ejemplo que te dio GusGarsaky por el de tu formulario. Eso es lo que ocurre cuando solo se limita a copiar y pegar en lugar de analizar y adaptar lo que te dan a lo que necesitas.

Como opción al envío de los datos utiliza GusGarsaky en su ejemplo, puedes usar un array y solo juntarías los valores con el método .join() y un & como unión.

Código Javascript:
Ver original
  1. var data = [];
  2. data.push(
  3.     "nombre" + "=" + document.querySelector("#txtname").value,
  4.     "apellido" + "=" + document.querySelector("#txtlastname").value,
  5.     "dni" + "=" + document.querySelector("#txtdni").value
  6. );
  7.  
  8. //Y en el envío de los datos con el método .send()
  9. xhr.send(data.join("&"));

También podrías enviar un objeto literal, como lo hace GusGarsaky en su ejemplo aunque le faltó tomar los valores de los elementos, con la diferencia de que llegaría un objeto con sus valores, mientras que de la forma en la que lo hago, los valores llegan independientes unos de otros. En otras palabras, enviando un objeto, tendrías que ingresar al objeto para poder tomar los valores, mientras que de la otra forma, los puedes tomar directamente con un $_POST['nombre'].

Cualquiera de ambas formas es buena, aunque si optas por la primera, te recomiendo parsear el objeto literal a JSON con el método JSON.stringify() y tan solo tendrías que decodificarlo en el archivo PHP con la función json_decode().

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 28/07/2015 a las 16:53 Razón: Recomendación
  #6 (permalink)  
Antiguo 28/07/2015, 17:36
 
Fecha de Ingreso: febrero-2007
Mensajes: 232
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: ejecutar fancybox despues del submit

hola bueno es mas que obio, donde se indica le nombre del id del form por el mio claro que lo reemplace, el problema pasa por que en java script que utilizo esta amarrado con el proceso de insert en el php, los códigos queme ponen, son buenos pero no se adaptan a lo que ya tengo armado y no quiero cambiar todo ya lo echo pues eso lo una adpatacion no es construir todo de nuevo puede dejar todo el código para que revisen

codigo de insert y conssulta

Código PHP:
<?php include "admin/conexion.php"?>
<?php
$proceso 
$_POST['proceso'];
if(
$proceso == 'Registrar'){
    
$codcampana $_POST['codcampana'];
    
$codcliente    $_POST['codcliente'];
    
$nombre         $_POST['nombre'];
    
$apellido         $_POST['apellido'];
    
$dni                 $_POST['dni'];
     
    
$insertar "INSERT INTO clientes (codcampana, codcliente, nombre, apellido, dni) VALUES('$codcampana','$codcliente','$nombre', '$apellido', '$dni')";
    
    
$grabarmysql_query($insertar);
}

$consulta "SELECT codcampana, imagen FROM campanas WHERE CURDATE() < fecha_exp AND estado='A'";
$resultado mysql_query($consulta) or die(mysql_error());

        
$fila=mysql_fetch_assoc($resultado);
        
$codcampana     $fila['codcampana'];
        
$imagen $fila ['imagen'];
        
        if(
$codcampana!=""){
        
$camp 1;
         
        }else {
         
        
$camp 0;
    }
?>
java script de validacion

Código HTML:
<script type="text/javascript">
function Validar(){
	
	if(document.fingreso.nombre.value == ""){
		alert("Debe ingresar Nombre")
		document.fingreso.nombre.focus()
		return
	}
	
	if(document.fingreso.apellido.value == ""){
		alert("Debe ingresar Apellidos")
		document.fingreso.apellido.focus()
		return
	}
	
	if(document.fingreso.dni.value == ""){
		alert("Debe ingresar DNI")
		document.fingreso.dni.focus()
		return
	}
	
		document.fingreso.action = "index.php"
		document.fingreso.proceso.value = "Registrar"
		document.fingreso.submit()
		
}
/*codigo nuevo*/
</script> 
fancybox que intento adaptar

Código HTML:
<script>
function mostrarGracias (){
  		$("#modalGracias").show();
		$.fancybox({
        autoSize: true,
        scrolling: "no",
		href : "gracias.html",
		type: "iframe"
    });	  
}
	</script> 

todo funciona bien solo necesito mostrar el modal al enviar los datos

saludos y gracias
  #7 (permalink)  
Antiguo 28/07/2015, 19:16
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: ejecutar fancybox despues del submit

El que tengas tu código organizado de una manera u otra (excepto que ejecutes el script JS antes de la aparición del formulario), no tiene nada que ver con el problema que comentas. Si tomas a un elemento mediante su valor identificador, no debería de aparecer ese error.

Quizá estás intentando ejecutarlo antes de que haya cargado el formulario; en ese caso, tienes que colocar el script al final del documento (antes de la etiqueta </body>) o tendrás que ejecutarlo mediante una función que se disparará cuando haya terminado de cargar el DOM.

Código Javascript:
Ver original
  1. document.addEventListener("DOMContentLoaded", function(){
  2.     /* Aquí debes de colocar el script */
  3. }, false);

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 28/07/2015, 21:16
 
Fecha de Ingreso: febrero-2007
Mensajes: 232
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: ejecutar fancybox despues del submit

el error ya no aparece, pero no entiendo como o hay que hacer para que funcione el insert y aparezca el modal no lo hace en realidad no hace nada ni da ningún error ya deje todo los códigos que uso, lo que puede hacer, dejaba por si alguien lo pueda armar o estructurar como se debe hacer pues por mas que intento no le doy.

espero alguien pueda construir lo que busco con los códigos dejados

saludos,
  #9 (permalink)  
Antiguo 28/07/2015, 23:14
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: ejecutar fancybox despues del submit

No he usado el Fancybox, pero supongo que debe de tener alguna opción para cuando se cierre manualmente la ventana modal que genera y es en esa acción cuando debes de enviar los datos del formulario. En otras palabras, al darle clic al botón de envío de datos, muestras la ventana modal y luego envías los datos pues, por lo que veo en tu código, no lo estás haciendo mediante una petición asíncrona (Ajax) sino de la manera tradicional.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #10 (permalink)  
Antiguo 29/07/2015, 07:45
 
Fecha de Ingreso: febrero-2007
Mensajes: 232
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: ejecutar fancybox despues del submit

en realidad lo que tenia era un alert, cuando enviaba los datos, luego salia un alert y daba la confirmación datos enviados correctamente, en este caso quiero remplazar el alert con un modal que diga lo mismo datos enviados correctamente nada mas, no necesito que el modal envié data ni al abrir ni al cerrar solo es un mensaje de gracias, con el alert funcionaba peor me han pedido que lo cambie a un modal que diga gracias luego del envió solo es eso

Saludos,
  #11 (permalink)  
Antiguo 29/07/2015, 10:08
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: ejecutar fancybox despues del submit

El caso es que si ejecutas el método .submit(), se recarga la ventana y tu modal no tendrá tiempo para visualizarse. Lo que debes de hacer es buscar en la documentación del FancyBox el evento que se produce cuando se cierra el modal para que ahí ejecutes una función que realice el envío de los datos. También tienes como opción retrasar el envío mediante el método .setTimeout(), así le podrás dar algunos segundo al modal para que se visualice antes de enviar los datos.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: fancybox, html, javascript, php, submit
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 09:21.