Close dialog on click (anywhere)

前端 未结 10 1007
旧时难觅i
旧时难觅i 2020-11-30 23:34

Is there a default option to close a jQuery dialog by clicking somewhere on the screen instead of the close icon?

相关标签:
10条回答
  • 2020-11-30 23:59

    Edit: Here's a plugin I authored that extends the jQuery UI Dialog to include closing when clicking outside plus other features: https://github.com/jasonday/jQuery-UI-Dialog-extended

    Here are 3 methods to close a jquery UI dialog when clicking outside popin:

    If the dialog is modal/has background overlay: http://jsfiddle.net/jasonday/6FGqN/

    jQuery(document).ready(function() {
        jQuery("#dialog").dialog({
            bgiframe: true,
            autoOpen: false,
            height: 100,
            modal: true,
            open: function() {
                jQuery('.ui-widget-overlay').bind('click', function() {
                    jQuery('#dialog').dialog('close');
                })
            }
        });
    }); 
    

    If dialog is non-modal Method 1: http://jsfiddle.net/jasonday/xpkFf/

    // Close Pop-in If the user clicks anywhere else on the page
    jQuery('body')
        .bind('click', function(e) {
            if(jQuery('#dialog').dialog('isOpen')
                && !jQuery(e.target).is('.ui-dialog, a')
                && !jQuery(e.target).closest('.ui-dialog').length
            ) {
                jQuery('#dialog').dialog('close');
            }
        });
    

    Non-Modal dialog Method 2: http://jsfiddle.net/jasonday/eccKr/

    $(function() {
        $('#dialog').dialog({
            autoOpen: false, 
            minHeight: 100,
            width: 342,
            draggable: true,
            resizable: false,
            modal: false,
            closeText: 'Close',
            open: function() {
                closedialog = 1;
                $(document).bind('click', overlayclickclose); },
            focus: function() { 
                closedialog = 0; },
            close: function() { 
                $(document).unbind('click'); }
        });
    
        $('#linkID').click(function() {
            $('#dialog').dialog('open');
            closedialog = 0;
        });
    
        var closedialog;
    
        function overlayclickclose() {
            if (closedialog) {
                $('#dialog').dialog('close');
            }
            //set to one because click on dialog box sets to zero
            closedialog = 1;
        }
    });
    
    0 讨论(0)
  • 2020-12-01 00:00

    When creating a JQuery Dialog window, JQuery inserts a ui-widget-overlay class. If you bind a click function to that class to close the dialog, it should provide the functionality you are looking for.

    Code will be something like this (untested):

    $('.ui-widget-overlay').click(function() { $("#dialog").dialog("close"); });
    

    Edit: The following has been tested for Kendo as well:

    $('.k-overlay').click(function () {
                var popup = $("#dialogId").data("kendoWindow");
                if (popup)
                    popup.close();
            });
    
    0 讨论(0)
  • 2020-12-01 00:01

    Facing the same problem, I have created a small plugin that enables to close a dialog when clicking outside of it whether it a modal or non-modal dialog. It supports one or multiple dialogs on the same page.

    More information on my website here: http://www.coheractio.com/blog/closing-jquery-ui-dialog-widget-when-clicking-outside

    Laurent

    0 讨论(0)
  • 2020-12-01 00:09

    Try this:

    $(".ui-widget-overlay").click(function () {
        $(".ui-icon.ui-icon-closethick").trigger("click");
    }); 
    
    0 讨论(0)
  • 2020-12-01 00:19

    If you have several dialogs that could be opened on a page, this will allow any of them to be closed by clicking on the background:

    $('body').on('click','.ui-widget-overlay', function() {
        $('.ui-dialog').filter(function () {
        return $(this).css("display") === "block";
        }).find('.ui-dialog-content').dialog('close');
    });
    

    (Only works for modal dialogs, as it relies on '.ui-widget-overlay'. And it does close all open dialogs any time the background of one of them is clicked.)

    0 讨论(0)
  • 2020-12-01 00:19

    This post may help:

    http://www.jensbits.com/2010/06/16/jquery-modal-dialog-close-on-overlay-click/

    See also How to close a jQuery UI modal dialog by clicking outside the area covered by the box? for explanation of when and how to apply overlay click or live event depending on how you are using dialog on page.

    0 讨论(0)
提交回复
热议问题