2009-09-01 57 views
10

Estoy usando el complemento Fancybox para mis ventanas modales. Parece que no importa qué opciones utilizo, no puedo evitar que la ventana modal de fancybox se cierre cuando el usuario hace clic fuera de la ventana modal de fancybox (área atenuada).jquery fancybox - evitar cerrar al hacer clic fuera de fancybox

¿Hay alguna manera de forzar al usuario a hacer clic en la X o en un botón que active el evento de cierre? Parece que debería ser simple, así que espero que esté leyendo los ejemplos incorrectamente.

He intentado hideOnContentClick: false pero eso no parece funcionar para mí. ¿Algunas ideas?

+1

Funciona en el enlace del sitio que le diste, ¿tiene algún código? – waqasahmed

+0

Correcto, pero en todos los ejemplos, si hace clic fuera de la ventana modal, se cierra. Quiero que permanezca abierto a menos que el usuario haga clic en la X (en ningún otro lugar). – Mike

Respuesta

4

No hay otra opción para eso. Tendrás que cambiar el código fuente.

En jquery.fancybox-1.2.1.js que necesitará comentar (o eliminar) la línea 341 en el método _finish:

//$("#fancy_overlay, #fancy_close").bind("click", $.fn.fancybox.close); 
+0

Excelente. Comenté la línea y agregué: $ ("# fancy_close) .bind (" click ", $ .fn.fancybox.close); Esto hace exactamente lo que necesito. ¡Gracias! – Mike

+1

hay una opción como en cool_dev respuesta a continuación, la edición del código dará lugar a problemas cuando necesite actualizar, sus cambios serán sobrescritos –

+0

cómo se leyó el archivo. Hay un método para convertir Js minificado? –

1

Sólo añadir siguiente línea a su función, no tiene que cambiar nada en jquery.fancybox-1.2.6.js

callbackOnStart : function() {$("#fancy_overlay").bind("click","null");}, 
+0

Sólo queríamos este comportamiento en uno de nuestras cajas de lujo para cambiar la fuente no era una opción, ¡Gracias! – spilliton

+0

Acabo de descubrir que esto no funciona en Google Chrome, aún no entiendo por qué. – spilliton

7

estoy usando FancyBox 1.3.1, si quieres forzar al usuario a cerrar el cuadro de modal con solo hacer clic en el botón, se puede especificar en la configuración:

<script type="text/javascript"> 
    $(document).ready(function() { 
    $("#your_link").fancybox({ 
     'hideOnOverlayClick':false, 
     'hideOnContentClick':false 
    }); 
    }); 
</script> 
+0

¡Muchas gracias! Trabajó con fancybox 1.3.4 –

+1

Doesn ' Para trabajar en fancybox 2.0+ – Josh1billion

11
<script type="text/javascript"> 
    $(document).ready(function() { 
    $("#your_link").fancybox({ 
     'hideOnOverlayClick':false, 
     'hideOnContentClick':false 
    }); 
    }); 
</script>        
3

Me encontré con el mismo "problema". Esto funcionó para mí:

$("#fancybox-overlay").unbind(); 
+1

para la versión 2.1.4 pueden cambiar esto a $ (". fancybox-ov erlay "). unbind(); – loQ

23
jQuery(".lightbox").fancybox({ 
     helpers  : { 
      overlay : { 
       speedIn : 0, 
       speedOut : 300, 
       opacity : 0.8, 
       css  : { 
        cursor : 'default' 
       }, 
       closeClick: false 
      } 
     }, 
    }); 
+2

esto en realidad no responde la pregunta original, que usa fancybox v1.2.1. Para las versiones entre v1.2.6 y v1.3.4, vea la respuesta de @ cool_dev. Para fancybox 2.x ver http://stackoverflow.com/a/8404587/1055987 – JFK

+0

¡Funciona para mí! gracias por el código muy útil! –

3

ninguna de las anteriores trabajó para mí, por lo que acabo de escribir un poco simple para la versión más reciente de FancyBox.

function load(parameters) { 
    $('.fancybox-outer').after('<a href="javascript:;" onclick="javascript:{parent.$.fancybox.close();}" class="fancybox-item fancybox-close" title="Close"></a>'); 
} 

$(document).ready(function() { 
    $(".various").fancybox({ 
     modal: true, 
     afterLoad: load 
    }); 
}); 

Espero que esto ayude :)

+1

para la última versión de fancybox check http://stackoverflow.com/a/8404587/1055987 – JFK

2

La solución $("#fancybox-overlay").unbind() dado para esta pregunta @Gabriel funciona, excepto que necesitaba para obligar a éste a la FancyBox después de que carga su contenido, y no podía desvincular inmediatamente. Para cualquier persona que se encuentra con este problema, el siguiente código resuelve el problema para mí:

$('.fancybox').fancybox({'afterLoad' : function() { 
    setTimeout(function() { $("#fancybox-overlay").unbind(); }, 400);} 
}); 

El retardo de 400 ms tengo trabajo para mí. Funcionó con 300ms pero no quería arriesgarme.

5

Si está utilizando Fancybox 1.2.6 (como si estuviera en un proyecto), descubrí la opción hideOnOverlayClick. Puede configurarlo en falso (por ejemplo, hideOnOverlayClick: falso).

Encontré esta opción mientras exploraba para modificar el código según la sugerencia dada por Scott Dowding.

0

Tuve que usar una combinación de todas las respuestas anteriores, ya que todas incluyen errores. Ciertamente, no es necesario editar el código fuente.

En mi caso, quería desactivar los clics superpuestos cerrando el cuadro ya que tenía una progresión de preguntas que se mostrarían secuencialmente dentro de la caja de fantasía, así que no quería que los usuarios perdieran su progreso al hacer clic accidentalmente en la superposición , pero quería mantener esa funcionalidad en otro lugar de la página.

Utilice esta opción para deshabilitarlo:

$(".fancybox-overlay").unbind(); 

Utilice esta opción para volver a habilitarla:

$(".fancybox-overlay").bind("click", $.fancybox.close); 
0

sólo tiene que utilizar el siguiente código:

$(document).ready(function() { 
    $("a#Mypopup").fancybox({ 
     "hideOnOverlayClick" : false, // prevents closing clicking OUTSIE fancybox 
     "hideOnContentClick" : false, // prevents closing clicking INSIDE fancybox 
     "enableEscapeButton" : false // prevents closing pressing ESCAPE key 
    }); 
    $("a#Mypopup").trigger('click'); 
}); 

<a id="Mypopup" href="images/popup.png"><img alt="Mypopup" src="images/popup.png" /></a> 
2

establecer el parámetro closeClick a false dentro de su función:

$(".video").click(function() { 
    $.fancybox({ 
     width: 640, 
     height: 385, 
     helpers: { 
      overlay: { 
       closeClick: false 
      } 
     } 
    }); 

    return false; 
}); 
+1

por favor no grite, especialmente no en ** Bold ** :-) – kleopatra

1

se puede evitar que la caja de lujo para cerrar mediante la aplicación de estos ajustes

'showCloseButton'=>false, // hide close button from fancybox 
'hideOnOverlayClick'=>false, // outside of fancybox click disabled 
'enableEscapeButton'=>false, // disable close on escape key press 

obtener la configuración del siguiente enlace

http://www.fancybox.net/api

6

Para esta edición el FancyBox, por favor trate de esta manera

$("YourElement").fancybox({ 
helpers: { 
     overlay: { closeClick: false } //Disable click outside event 
    } 

Espero que esto ayude.

+0

esto no responde realmente a la pregunta original, que usa fancybox v1.2.1. Para las versiones entre v1.2.6 y v1.3.4, vea la respuesta de @ cool_dev. Para fancybox 2.x ver http://stackoverflow.com/a/8404587/1055987 – JFK

+0

@JKF: Gracias mejoraré mi conocimiento – David

-1

Puede establecer el valor predeterminado closeClick en la superposición en falso. Me ha funcionado en la versión 2.1.5.

$.fancybox.helpers.overlay.defaults.closeClick=false;