关闭jQuery UI对话框上的覆盖点击

Close jQuery UI dialog on overlay click

本文关键字:覆盖 jQuery UI 对话框 关闭      更新时间:2023-09-26

我想在人们点击叠加时关闭我的模态,通常你会使用

jQuery('.ui-widget-overlay').bind('click', function() {
            jQuery('#dialog').dialog('close');
        })

,但我加载我的模态后,我创建它,所以似乎上面的代码干扰了我的不知何故。这是我到目前为止的代码。

var dialog = $(".dialog").dialog({
        autoOpen: false,
        closeText: "",
        width: 'auto',
        modal: true,
        position: { my: "center top", at: "center top+30", of: "body" },
        show: {
            effect: 'fade',
            duration: 250,
        },
        hide: {
            effect: 'fade',
            duration: 250
        },
        
    });
    $(".currentDay").click(function () {
        var id = event.target.id;
        var url = '/Home/CalenderPartial/' + id;
        dialog.load(url, function () {
            dialog.dialog("open");
        });
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

您可以在open方法中绑定事件

var dialog = $(".dialog").dialog({
  autoOpen: false,
  closeText: "",
  width: 'auto',
  modal: true,
  open: function(event, ui) {   //added here
    jQuery('.ui-widget-overlay').on('click', function() {
      jQuery('#dialog').dialog('close');
    });
  },
  position: {
    my: "center top",
    at: "center top+30",
    of: "body"
  },
  show: {
    effect: 'fade',
    duration: 250,
  },
  hide: {
    effect: 'fade',
    duration: 250
  },
});

我找到问题了。我试图在初始化对话框之前关闭它。

    var dialog = $(".dialog").dialog({
        autoOpen: false,
        closeText: "",
        width: 'auto',
        modal: true,
        position: { my: "center top", at: "center top+30", of: "body" },
        show: {
            effect: 'fade',
            duration: 250,
        },
        hide: {
            effect: 'fade',
            duration: 250
        },
        open: function () {
            jQuery('.ui-widget-overlay').on('click', function () {
                dialog.dialog('close');
            });
        },
    });
    $(".currentDay").click(function () {
        var id = event.target.id;
        var url = '/Home/CalenderPartial/' + id;
        dialog.load(url, function () {
            dialog.dialog("open");
        });
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

这是我最终得到的代码,它按预期工作。

总结一下,把这段代码放到你的对话框init中。

open: function() {
        jQuery('.ui-widget-overlay').on('click', function() {
            jQuery('#dialog').dialog('close');
        })