【问题标题】:Closing jQuery Datepicker When Closing jQuery Dialog关闭 jQuery 对话框时关闭 jQuery Datepicker
【发布时间】:2010-01-20 14:51:37
【问题描述】:

第一次来这里,比程序员更像是网页设计师,所以要温柔! ;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                               
        });

但我对如何做到这一点有点困惑。有人有什么建议吗?将不胜感激!

谢谢 菲尔

【问题讨论】:

    标签: jquery-ui jquery-ui-dialog jquery-ui-datepicker


    【解决方案1】:

    像这样将关闭回调添加到您的对话框中:

    $(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:没问题,再次检查更紧凑的整体解决方案,如果您要运行大量脚本,那么它将节省一些 CPU 周期,直到它们才创建东西'重新要求。需要注意的一点是,所有 jQuery 对象都是真正的集合,您也可以这样做 $("#advanced_search .start_date, #advanced_search .end_date,") 并减少重复代码。
    • 您好,尼克,感谢您的更新。我已经添加了该代码,Firebug 给了我以下错误:打开属性列表后缺少 }:function(event, ui) {\n 有什么想法吗?
    • @Phil - 抱歉我没见过这个,在关闭函数后加逗号,答案已更新,点击编辑链接查看更改的确切位置
    • 别担心,我非常感谢您花时间帮助我!谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2016-05-12
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多