Foros del Web » Programando para Internet » Jquery »

Formulario en ventana modal de Bootstrap

Estas en el tema de Formulario en ventana modal de Bootstrap en el foro de Jquery en Foros del Web. Buenas a todos. Tengo un formulario insertado en una ventana modal de Bootstrap. Es un formulario de registro de usuarios (registro.php) y estoy intentando que ...
  #1 (permalink)  
Antiguo 06/04/2015, 11:25
 
Fecha de Ingreso: octubre-2007
Mensajes: 91
Antigüedad: 16 años, 5 meses
Puntos: 1
Formulario en ventana modal de Bootstrap

Buenas a todos.
Tengo un formulario insertado en una ventana modal de Bootstrap. Es un formulario de registro de usuarios (registro.php) y estoy intentando que la respuesta al mismo (los errores de validación o la confirmación de que todo está OK) se vea en la misma ventana modal, pero no lo consigo.
Mis conocimientos de Javascript son bastante limitados, el código lo tomé de aquí Agradecería si me pueden dar una mano
Mi código:
Código:
<script language="javascript">
$(function() {
  $("#register").submit(function(e) {
    e.preventDefault();
 
    $form = $(this);
    $.post(document.location.href, $form.serialize(), function(response) {
      $feedback = $("<div>").html(response).find(".form-feedback").hide();

      $feedback.fadeIn();
    });
  });
})  
</script>
El div clase "form feedback" es el que aparece coonfirmando que está todo bien.

El formulario:
Código:
		
            <form action="register.php" method="POST" name="adsearch" id="register"> 
            <div class="alert-box success form-feedback">Data OK</div>
				 <div class="register-top-grid">
					<label for="name">Nombre*</label>
					<input name="name" id="name" type="text" class="" value="" />
    				<label for="surname">Apellido*</label>
					<input name="surname" id="surname" type="text" class="" value="" />
<input type="submit" name="submit_reg" value="Registrarse" class="register" /> 
</form>
En realidad solo necesito que se procese el formulario en la ventana, ya que la respuesta la daría el php. Probablemente alguien sepa de algún script más sencilllo que pueda ayudarme.
En mi página lo que hace es recargar la página de fondo, donde está insertado el formulario, quedando el formulario sin enviarse.
Gracias de antemano.

Última edición por kike2lucas; 06/04/2015 a las 11:38
  #2 (permalink)  
Antiguo 06/04/2015, 11:41
(Desactivado)
 
Fecha de Ingreso: abril-2013
Ubicación: rosario
Mensajes: 248
Antigüedad: 11 años
Puntos: 17
Respuesta: Formulario en ventana modal de Bootstrap

vos decis que el div .form-feedback es donde mostras los mensajes, ahora xq lo estas ocultando en esta linea?
Código Javascript:
Ver original
  1. feedback = $("<div>").html(response).find(".form-feedback").hide();
  #3 (permalink)  
Antiguo 06/04/2015, 11:44
(Desactivado)
 
Fecha de Ingreso: abril-2013
Ubicación: rosario
Mensajes: 248
Antigüedad: 11 años
Puntos: 17
Respuesta: Formulario en ventana modal de Bootstrap

tambien podes usar esto


Código Javascript:
Ver original
  1. $.post( "example.php", function() {
  2.   //hace lo que tenga que hacer el form
  3. }).done(function() {
  4.     alert( "Salio todo bien" );
  5.   })
  6.   .fail(function() {
  7.     alert( "hubo uno error" );  
  8. });
  #4 (permalink)  
Antiguo 06/04/2015, 12:23
 
Fecha de Ingreso: octubre-2007
Mensajes: 91
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Formulario en ventana modal de Bootstrap

Mil gracias por la rápida respuesta.
Creo que estoy confundiendo un poco con el div del feedback. Lo que necesito es que la respuesta (los errores o el OK) se me muestren en la ventana modal sin recargar la página. El código lo tomé de una página web pero no me funciona. El problema principal que tengo es que no se me envía el formulario. Probé tu código y el formulario se envía pero se recarga la página y al hacerlo vuela la ventana modal :S
  #5 (permalink)  
Antiguo 07/04/2015, 08:20
(Desactivado)
 
Fecha de Ingreso: abril-2013
Ubicación: rosario
Mensajes: 248
Antigüedad: 11 años
Puntos: 17
Respuesta: Formulario en ventana modal de Bootstrap

Ok, pone el codigo completo a ver si encuentro algo
  #6 (permalink)  
Antiguo 08/04/2015, 12:29
 
Fecha de Ingreso: octubre-2007
Mensajes: 91
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Formulario en ventana modal de Bootstrap

Estuve indagando un poco. Tu código con los alert no me va bien porque el formulario hace la validación PHP en el servidor; devuelve el mismo formulario con los errores, o un mensaje de éxito. Quiero que éste mensaje se vea en la propia ventana modal (bootstrap)
He encontrado este código y he logrado que el formulario se envíe, pero la página todavía se recarga.
Código:
$(document).ready(function() {
    $().ajaxStart(function() {
        $('#loading').show();
        $('#result2').hide();
    }).ajaxStop(function() {
        $('#loading').hide();
		$('#result2').fadeIn('slow');
    });
    $('#register').submit(function() {
        $.ajax({
            type: 'POST',
            url: $(this).attr('register.php'),
            data: $(this).serialize(),
            success: function(data) {
                $('#result2').html(data);
				
            }
        })
        
        return false;
    }); 
})
El div#loading es un gif de precarga, no tiene importancia.
El div#result2 es donde debería cargar la respuesta del servidor que da el mismo "register.php"

Estuve tocando cosas y me da la sensación que el error está en la línea:
Código:
data: $(this).serialize(),
Hay algún error?

La página donde va el formulario "register.php", como dije antes, es un montón de código y no sé si tiene sentido ponerlo, pero por si acaso:
Código:
<?php include 'conex.php'; ?>
   <div class="modal fade" id="basicModal" tabindex="-1" role="dialog" aria-labelledby="basicModal" aria-hidden="true">
      <div class="modal-dialog">
        <div class="modal-content">
          
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h4 class="modal-title" id="myModalLabel">Registrarse</h4>
          </div>
          
          <div class="modal-body">
<?php if (isset ($_POST["submit_reg"])){
//obtención de variables
$name = $_POST ["name"];
$surname = $_POST ["surname"];
if (empty($_POST ["provincia"])){$provincia="none";}else{$provincia = $_POST ["provincia"];}
$town = $_POST ["town"];
$postcode = $_POST ["postcode"];
$email = $_POST ["email"];
$postcode = $_POST ["postcode"];
$email = $_POST ["email"];
$pass = $_POST ["pass"];
$pass2 = $_POST ["pass2"];

//variables para comparar strings
$text="/^[a-zA-ZñÑáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙ\s]+$/";
$cpspain="/^(0[1-9]|5[0-2]|[0-4][0-9])[0-9]{3}$/";
$validmail="/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/";
//funcion que comprueba los datos comparando con las variables de arriba
function checkname ($var, $var2){
	$error =false;
	if ( !preg_match($var, $var2) || strlen($var2) <= 2) {
	$error=true;
	}
	return $error;	
}
function checksurname ($var, $var2){
	$error =false;
	if ( !preg_match($var, $var2) || strlen($var2) <= 2) {
	$error=true;
	}
	return $error;	
}
function checkstate ($var){
	if ($var=="none"){
	$error=true;
	}else{
	$error=false;
	}	
	return $error;
}
function checktown ($var, $var2){
	$error =false;
	if ( !preg_match($var, $var2) || strlen($var2) <= 2) {
	$error=true;
	}
	return $error;	
}
function checkpostcode ($var, $var2){
	$error =false;
	if ( !preg_match($var, $var2) || strlen($var2) != 5) {
	$error=true;
	}
	return $error;
}
function checkemail($var, $var2){
	$error =false;
	if ( !preg_match($var, $var2)) {
	$error=true;
	}
	return $error;
}
function checkpasslong($var){
	$error =false;
	if (strlen($var) <= 4) {
	$error=true;
	}
	return $error;
}
function checkpassrepeat($var, $var2){
	$error =false;
	if ( $var != $var2) {
	$error=true;
	}
	return $error;
}

$errorname = checkname ($text, $name);
$errorsurname = checksurname ($text, $surname);
$errorstate = checkstate ($provincia);
$errortown = checksurname ($text, $town);
$errorpostcode = checkpostcode ($cpspain, $postcode);
$errormail = checkemail ($validmail, $email);
$errorpasslong = checkpasslong ($pass);
$errorpassrepeat = checkpassrepeat ($pass, $pass2);

echo "formulario enviado";


}

?>          
			
            <form id="register" action="register.php" method="POST" name="adsearch"> 
             <div class="register-top-grid">
					<label for="name">Nombre*</label>
					<input name="name" id="name" type="text" class="<?php if (isset($errorname) && $errorname==true) {echo "error";}?>" value="<?php if (isset($name)){echo $name;} ?>" />
    				<label for="surname">Apellido*</label>
					<input name="surname" id="surname" type="text" class="<?php if (isset($errorsurname) && $errorsurname==true) {echo "error";}?>" value="<?php if (isset($surname)){echo $surname;} ?>" />
                    <label for="provincia">Provincia*</label><select name="provincia" id="provincia" class="<?php if (isset($errorstate) && $errorstate==true) {echo "error";}?>" >
    	<option value="Elegir Provincia" disabled selected="selected">Elegir Provincia</option>
 		    <?php 	
				$sql3= "SELECT * FROM gbv_state";	
				$res3=mysql_query ($sql3); 
				while ($row3 = mysql_fetch_array($res3)){
				$p= $row3[id_prov];
				echo "<option value='$p' ";
				if (isset($provincia)){if($p==$provincia) {echo "selected";}}				
				echo ">";
				echo "$row3[nombre]";
				echo "</option>";
			    }; ?></select><br />
                	<label for="town"><?php $to=utf8_encode("Población");echo $to;?></label>
                	<input name="town" id="town" type="text" class="<?php if (isset($errortown) && $errortown==true) {echo "error";}?>" value="<?php if (isset($town)){echo $town;} ?>" />
              		<label for="postcode"><?php $cp=utf8_encode("Código Postal");echo $cp;?></label>
					<input name="postcode" id="postcode" type="text" class="<?php if (isset($errorpostcode) && $errorpostcode==true) {echo "error";}?>" value="<?php if (isset($postcode)){echo $postcode;} ?>" /> 
       				<label for="email">Email</label><input name="email" id="email" type="text" class="<?php if (isset($errormail) && $errormail==true) {echo "error";}?>" value="<?php if (isset($email)){echo $email;} ?>" /> 
                    <label for="pass"><?php $pw=utf8_encode("Contraseña");echo $pw;?></label>
					<input name="pass" id="pass" type="password" class="<?php if (isset($errorpasslong) && $errorpasslong==true) {echo "error";}?>" value="" />        
     				<label for="repeat"><?php $rpw=utf8_encode("Repetir Contraseña");echo $rpw;?></label>
					<input name="pass2" id="pass2" type="password" class="<?php if (isset($errorpassrepeat) && $errorpassrepeat==true) {echo "error";}?>" value="" /> 
                    <br><br>
                    <input type="submit" name="submit_reg" value="Registrarse" class="register" /> 
                    </form>
            </div>
            <div id="result2"></div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
          </div>
         </div><!-- End Modal body -->
      
      </div>
   </div>
  </div>

Última edición por kike2lucas; 08/04/2015 a las 12:44 Razón: Errores en etiquetas
  #7 (permalink)  
Antiguo 08/04/2015, 13:06
(Desactivado)
 
Fecha de Ingreso: abril-2013
Ubicación: rosario
Mensajes: 248
Antigüedad: 11 años
Puntos: 17
Respuesta: Formulario en ventana modal de Bootstrap

estas seguro que no te da error al enviar, es decir abriste el inspector o firebug y al momento de enviar no aparece ningun error?
digo, porque me hace mucho ruido esta parte del codigo.
Código Javascript:
Ver original
  1. $(this).attr('register.php'),
  2. //en todo caso seria
  3. $(this).attr('action'),
  #8 (permalink)  
Antiguo 10/04/2015, 23:53
 
Fecha de Ingreso: octubre-2007
Mensajes: 91
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Formulario en ventana modal de Bootstrap

No, no me da error.
Cambié esa línea de código por
Código HTML:
 url: $(this).attr('action'),
El formulario se envía pero desaparece de la ventana modal. Lo que querría es que el formulario se procese en la misma ventana.

Etiquetas: ajax-php, bootstrap
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 12:57.