Cierre la ventana emergente de javascript haciendo clic en cualquier lugar

3 minutos de lectura

avatar de usuario
Tormod Ndsn

Soy super novato y necesito un consejo rápido. He instalado un complemento emergente basado en javascript en mi sitio de wordpress, que se abre automáticamente cuando alguien visita el sitio. Para cerrar la ventana emergente, el usuario deberá hacer clic en una cruz X en la esquina de la ventana emergente.

Necesito editar el complemento para que el usuario pueda hacer clic EN CUALQUIER LUGAR y el complemento se cerrará.

Aquí está el código javascript que encontré. algún consejo sobre esto?

function open_lightbox(){
    //var closebut = (typeof(ujiPopups) !== 'undefined' && ujiPopups != null && ujiPopups.showclose && ujiPopups.showclose == "true") ? true : false;
    jQuery("#popup").modal({
        onOpen: function (dialog) {
            dialog.overlay.fadeIn('fast');
            dialog.data.hide();
            dialog.container.show('fast', function () {
                dialog.data.fadeIn('slow');  
            }); 
        },
        autoResize: false,
        autoPosition: true,
        escClose: false,
        zIndex: 999999,
        overlayClose: false
    });     
}

function popups_close(){
    jQuery.modal.close();
    jQuery("#popup").remove();
}   

  • Tenga en cuenta que esto es javascriptno java. Están muy cosas diferentes. He editado tu pregunta por ti.

    –Rory McCrossan

    1 de noviembre de 2013 a las 13:49


  • ah ok gracias por ayudar 🙂

    – Tormod Ndsn

    1 de noviembre de 2013 a las 13:51

  • ¿Usar CSS para cerrar una ventana emergente?

    – putvande

    1 de noviembre de 2013 a las 13:53

  • posible duplicado del evento jQuery click off element

    –André Dion

    1 de noviembre de 2013 a las 13:58

avatar de usuario
stuart kershaw

Algo como esto debería hacerlo:

$(document).click(function() { 
    if($('#popup').is(':visible')) {
        popups_close();
    }
});

Si desea mantener el modal activo en la interacción con la ventana emergente:

$(document).click(function(e) {
    if (!$(e.target).is("#popup")) {
        if ($('#popup').is(':visible')) {
            popups_close();
        }
    }
});

Un ejemplo simple aquí: http://jsfiddle.net/wnT4G/

*Consulte los comentarios para ver algunas revisiones elegantes de @ComFreek

  • ¿Esto también cierra el cuadro de diálogo si uno hace clic en el cuadro de diálogo?

    – ComFreek

    1 de noviembre de 2013 a las 13:56

  • Supuse que era la intención ya que la pregunta no indica lo contrario. Agregaré una solución.

    – Stuart Kershaw

    1 de noviembre de 2013 a las 13:56


  • Su segundo ejemplo no funcionará porque $(document).not('#popup').length == 0 (jsviolín).

    – ComFreek

    1 de noviembre de 2013 a las 14:21

  • Gracias @ComFreek, arreglando.

    – Stuart Kershaw

    1 de noviembre de 2013 a las 14:34

  • Lamento molestarlo nuevamente, pero su solución aún tiene errores. Caso de prueba: jsfiddle.net/wnT4G/4 (haga clic en <span>blub</span>). Aquí hay una soluciónpero usar el burbujeo de eventos sería más elegante en mi opinión: jsfiddle.net/wnT4G/2

    – ComFreek

    1 de noviembre de 2013 a las 14:43

avatar de usuario
BordiArt

Yo uso un método bastante extraño, pero funciona:

$('.click-btn').click(function(){
   $('.modal').show(); //show popup
})

$('body').click(function(){
   $('.modal').hide(); //hide modal
})

$('.click-btn, .modal').click(function(e){
   e.stopPropagation; // don't close modal by clicking inside modal and by clicking btn
})

evento de usuario

function addEvent(action) {
    $("body").click(function() { action();});
}

function clearEvent() {
    $("body").off('click');
}

Quieres hacer esto:

$(document).click(function()
{
     popups_close();
})

$('Your selector of the popup').click(function(e)
{
    e.stopPropagation();          
})

.stopPropagation(); en realidad cancelará el .click() función que se activó al hacer clic en el documento. Entonces, cada vez que haga clic en cualquier parte del documento, la ventana emergente se cerrará, excepto cuando haga clic en la ventana emergente.

¡Espero que esto haya ayudado!

jsviolín

Creo que solo quieres establecer overlayClose y posiblemente escClose a la verdad Su complemento probablemente crea una superposición en la página para que los usuarios no puedan hacer clic en ningún otro lugar, así que supongo overlayClose: true obtendrá el complemento para cerrar el cuadro de diálogo cuando se haga clic en la superposición.

    escClose: true,
    overlayClose: true

No estoy seguro de qué plugin estás usando, pero Éste usa un clickClose propiedad.

¿Ha sido útil esta solución?