jQuery UI datepicker在对话框中自动打开

tur*_*zky 29 ajax jquery dialog jquery-ui datepicker

我有一个在jQuery对话框对象中使用的datepicker.使用加载对话框内容的来源.load().在对话框中,我创建了一个脚本,为文本输入创建一个日期选择器.

$("#date").datepicker({ ... });
Run Code Online (Sandbox Code Playgroud)

当我第一次打开对话框时 - 一切都没问题,但如果我关闭它并再次重新打开,则会自动触发datepicker(并且没有这样的选项autoOpen:false)是否有任何方法可以防止这种情况或我做错了什么?

Hup*_*are 33

我发现更简单的方法:

$("#dialogPopper").click(
                    function() {
                        $("#date").datepicker("disable");
                        $("#dialog").dialog("open");
                        $("#date").datepicker("enable");
                        return false;
                    }
                  );
Run Code Online (Sandbox Code Playgroud)


jso*_*onx 23

当您将datepicker字段放在对话框的开头时,它会自动打开.您可以在对话框的开头放置隐藏的输入.

<input type="text" style="width: 0; height: 0; top: -100px; position: absolute;"/>
Run Code Online (Sandbox Code Playgroud)

  • 很好的贫民窟技术。我之前有一些输入,但是它们是“类型隐藏”的,似乎不算在内。之前添加无用的输入效果很好,但是仍然添加无用的dom元素,并且在发布表单时,此值一无所有。 (2认同)

bel*_*qua 15

我有这个确切的问题并且只是在tvanfosson的技术上略有不同的变化来解决它.出于某种原因,我不得不手动将"click"事件附加到datepicker字段,如下所示.

 $('#dialog').dialog({
 open: function(event, ui) {
    $(ui).find('#date').datepicker().click(function(){
        $(this).datepicker('show');
    });
 },
 close: function(event,ui) {
    $(ui).find('#date').datepicker('destroy');
 }});
Run Code Online (Sandbox Code Playgroud)

(抱歉 - 我希望将此作为对tvanfosson帖子的评论发布,但没有必要的代表.)

  • 很好的解决方案,虽然我不得不改变ui.如果没有准备好对话框(在DOM中),而是使用JS动态构建它,则需要这样做. (2认同)

tva*_*son 8

您可能想要在关闭对话框时考虑销毁datepicker,并在对话框的open事件处理程序中创建它,而不是在对话框创建中将其包含为脚本.

 $('#dialog').dialog({
     open: function(event, ui) {
        $(ui).find('#date').datepicker();
     },
     close: function(event,ui) {
        $(ui).find('#date').datepicker('destroy');
     }
 });
Run Code Online (Sandbox Code Playgroud)

您还可以尝试不同的事件/方法,看看是否真的需要重新创建它,但我认为这样可行.


小智 5

原因是:你的模态形式内的第一个项目是datepicker文本字段,当模式被触发时,活动控件是包含datepicker的控件.

我发现了两种替代解决方案:

  1. 更改字段的顺序.避免使用datepicker的人留在第一位.

  2. 不要在一段单独的代码中将datepicker设置为字段,在打开对话框的函数内(打开后立即执行$("#dialog").dialog("open");).