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

Bloquear div mientras se recibe información.

Estas en el tema de Bloquear div mientras se recibe información. en el foro de Frameworks JS en Foros del Web. Buenos días, ¿Sabéis como puedo hacer para bloquear un div mientras se recibe nueva información en él? Ejemplo practico. Un formulario que el usuario rellena ...
  #1 (permalink)  
Antiguo 05/04/2011, 02:50
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Bloquear div mientras se recibe información.

Buenos días,

¿Sabéis como puedo hacer para bloquear un div mientras se recibe nueva información en él?

Ejemplo practico.
Un formulario que el usuario rellena y pulsa el boton enviar, me gustaria que todo el formulario se
viese "bloqueado" mientras se envia (ej. tarda 5 segundos en recibir respuesta del script que lo procesa) que durante esos 5 segundos el usuario no pudiese hacer clic
en ningun elemento del formulario incluido el boton enviar.

Lo he visto en alguna ocasión, sobre todo en peticiones ajax, que la capa en cuestión se oscurece hasta que vuelve a estar operativa.

Otro ejemplo donde también lo ví sería el de una paginación o tabs,
en el div hay información se pulsa sobre una pestaña y la pestaña actual se oscurece hasta que se recibe respuesta del servidor para mostrar el nuevo contenido.

¿Sabéis como conseguirlo?

Muchas gracias de antemano
  #2 (permalink)  
Antiguo 05/04/2011, 06:20
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Bloquear div mientras se recibe información.

se logra con un div transparente encima del form, algo asi

Código HTML:
Ver original
  1.     <head>
  2.         <title>Ejemplo</title>
  3.         <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
  4.         <script>
  5.  
  6.         $(function(){
  7.  
  8.             $('form').submit( function(){
  9.                 //Agregar un div al principio del form
  10.                 capa = $('<div class="capaTransparente">').prependTo(this);
  11.                 //Le doy opacidad
  12.                 capa.animate({'opacity': 0.5});
  13.                 //Alguna operacion ajax
  14.                 $.get('dos.jsp', function(){
  15.                     //Cuando termina la solicitud le doy opacidad 0
  16.                     capa.animate({'opacity': 0}, function(){
  17.                         //Cuando termina la animacion borro el div
  18.                         $(this).remove();
  19.                     })
  20.                 });
  21.  
  22.                 return false;
  23.             });
  24.  
  25.         });
  26.  
  27.         </script>
  28.         <style>
  29.  
  30.             form{margin:100px; position:relative; width:250px; height:150px}
  31.             .capaTransparente{position:absolute; height:100%; width:100%; background:#ccc; opacity: 0; filter: alpha(opacity=0); -moz-opacity: 0;}
  32.  
  33.         </style>
  34.     </head>
  35.     <body>
  36.  
  37.     <form>
  38.  
  39.         <select>
  40.             <option>1</option>
  41.         </select>
  42.         <input type="text">
  43.         <input id="enviar" type="submit" value="Enviar">
  44.     </form>
  45.  
  46.  
  47.     </body>
  48. </html>

fijate nomas el css que funcione
  #3 (permalink)  
Antiguo 27/04/2011, 15:43
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Bloquear div mientras se recibe información.

Buenas,

Al final encontré el jquery blockUI que bloquea la pantalla o incluso un div concreto. En mi caso quiero bloquear el div que contiene el formulario mientras se procesa la petición. Esto lo consigo de la siguiente manera.


Código Javascript:
Ver original
  1. $(document).ready(function() {
  2.         $('#contactar').submit( function(){
  3.              $('div#form_contactar').block({
  4.                 message: $('#msgEspera'),
  5.                css: {   border: '0px',
  6.                         backgroundColor:'transparent'
  7.                     },
  8.                 overlayCSS:  {
  9.                                 backgroundColor: '#D5D3D6',
  10.                                 opacity:         0.6
  11.                             }
  12.             });
  13.         });
  14.     });


El problema que tengo es que mi formulario tiene validaciones JS con jquery.validate

Código Javascript:
Ver original
  1. $("#contactar").validate({
  2.         rules:{
  3.             nombre:{required:true,minlength: 3},
  4.             email:{
  5.                 email:true,
  6.                 required:true,
  7.             },
  8.             departamento:{required:true},
  9.             asunto:{required:true,minlength: 5},
  10.             mensaje:{required:true,minlength: 10},
  11.  
  12.             captcha:{required:true,minlength: 6},
  13.         },
  14.         messages:{
  15.             nombre:{
  16.                 required:"Campo obligatorio",
  17.                 minlength: jQuery.format("Demasiado corto {0} caracteres mínimo")
  18.             },
  19.             email:{
  20.                 email:"El correo no es válido",
  21.                 required:"Campo obligatorio"
  22.             },
  23.             departamento:{
  24.                 required:"Campo obligatorio"
  25.             },
  26.             asunto:{
  27.                 required:"Campo obligatorio",
  28.                 minlength: jQuery.format("Demasiado corto {0} caracteres mínimo")
  29.             },
  30.             mensaje:{
  31.                 required:"Campo obligatorio",
  32.                 minlength: jQuery.format("Demasiado corto {0} caracteres mínimo")
  33.             },
  34.             captcha:{
  35.                 required:"Campo obligatorio",
  36.                 minlength: jQuery.format("Mínimo {0} caracteres")
  37.             },
  38.         }
  39.     });

Al tener estas validaciones y al estar declarado que cuando se hace el submit bloqueé el div, me está bloqueando aunque no hayan pasado satisfactoriamente las validaciones, es decir, estando vacio el formulario si pulso enviar, me saltan las validaciones bien pero me bloquea el formulario.

Lo ideal sería que no bloquease el formulario hasta que las validaciones esten correctas y validadas, solo entonces que permita enviar el formulario y se bloquee el div.

¿Sabéis cómo debo hacerlo?

Muchas gracias de antemano!
  #4 (permalink)  
Antiguo 29/04/2011, 13:58
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Bloquear div mientras se recibe información.

Al final he encontrado la forma, por suerte la función de jquery.validate tiene un metodo para saber si el formulario cumple con todas las validaciones

$("#contactar").valid()


Por lo que finalmente el codigo JS me quedó así

Cuando se pulsa el botón enviar del fomulario contactar compruebo que se hayan pasado todas las validaciones, si es así es TRUE el condicional, despues bloqueo toda capa del formulario contactar y muestro el mensaje de espera.

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("#contactar").submit(function() {
  3.         if($("#contactar").valid()){
  4.             $('div#form_contactar').block({
  5.                 message: $('#msgEspera'),
  6.                 css: {  border: '0px',
  7.             },
  8.             overlayCSS:  {
  9.                 backgroundColor: '#D5D3D6',
  10.                 opacity:         0.6
  11.             }
  12.             });
  13.         }
  14.     });
  15. });

Saludos!

Etiquetas: bloquear, mientras
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 22:01.