关闭jQuery对话框时关闭jQuery日期选择器。

4

第一次来到这里,更像是一个网页设计师而不是程序员,所以请温柔一点! ;o) 无论如何,正如标题所示,我有一个打开的对话框窗口,在其中有一个日期选择器。我想要的是,如果用户打开了日期选择器,然后点击对话框窗口的关闭按钮,日期选择器也会关闭。

目前我拥有以下代码:

        <!--// Modal Windows -->        
        $.ui.dialog.defaults.bgiframe = true;
        $(function() {
            $('#advanced_search').dialog({
                autoOpen: false,
                width: 600,
                height: 400,
                modal: true,
                resizable: false,
                draggable: false,
                title: 'Advanced Search',
            });
            $('.adv_search').click(function() {
                $('#advanced_search').dialog('open');
            });
        });

        <!--// Date Picker -->
        $("#advanced_search .start_date").datepicker({
            dateFormat: 'dd/mm/yy',
            showButtonPanel: true,
            duration: 0,
            constrainInput: true,
            showOn: 'button',               
            buttonImage: '/img/icons/50.png',
            buttonImageOnly: true                               
        });
        $("#advanced_search .end_date").datepicker({
            dateFormat: 'dd/mm/yy',
            showButtonPanel: true,
            duration: 0,
            constrainInput: true,
            showOn: 'button',
            buttonImage: '/img/icons/50.png',
            buttonImageOnly: true                               
        });

但是我有点不知道该怎么做。有人有什么建议吗?非常感谢!

谢谢 菲尔

1个回答

4
像这样将关闭回调函数添加到您的对话框中:
$(function() {
   $('#advanced_search').dialog({
        autoOpen: false,
        width: 600,
        height: 400,
        modal: true,
        resizable: false,
        draggable: false,
        title: 'Advanced Search',
        close: function() { 
          $("#advanced_search .start_date").datepicker('hide');
          $("#advanced_search .end_date").datepicker('hide');
        } 
    });
    $('.adv_search').click(function() {
        $('#advanced_search').dialog('open');
    });
});

这里提供一种全面的方法,选择器更简单,并且日期选择器只有在对话框实际打开时才会创建,所以如果用户从未进入它,则脚本运行较少:
$(function() {
   $('#advanced_search').dialog({
        autoOpen: false,
        width: 600,
        height: 400,
        modal: true,
        resizable: false,
        draggable: false,
        title: 'Advanced Search',
        close: function() { 
          $("#advanced_search .start_date").datepicker('hide');
          $("#advanced_search .end_date").datepicker('hide');
        }, 
        open: function(event, ui) {
          $(".start_date, .end_date", ui).datepicker({
            dateFormat: 'dd/mm/yy',
            showButtonPanel: true,
            duration: 0,
            constrainInput: true,
            showOn: 'button',               
            buttonImage: '/img/icons/50.png',
            buttonImageOnly: true                               
          });
        }
    });
    $('.adv_search').click(function() {
        $('#advanced_search').dialog('open');
    });
});

谢谢你超快速的回复,尼克。我很尴尬这是一个如此简单的解决方案 ;o) - Phil
@Phil:没问题,再检查一下是否有更紧凑的整体解决方案,如果你要运行很多脚本,那么在被要求之前不创建东西可以节省一些CPU周期。需要注意的一件事是,所有的jQuery对象都是集合,你也可以这样做$("#advanced_search .start_date, #advanced_search .end_date,")来减少重复代码。 - Nick Craver
嗨,Nick,感谢更新。我已经添加了那段代码,但是Firebug给了我以下错误提示:属性列表后缺少 } open: function(event, ui) {\n有什么想法吗? - Phil
@Phil - 抱歉我没看到这个,关闭函数后加上逗号,答案已更新,点击编辑链接查看更改的具体位置。 - Nick Craver
没关系,我非常感谢你花时间帮助我解决这个问题!谢谢!! - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接