【问题标题】:jquery datepicker - activate another datepicker on selectjquery datepicker - 在选择时激活另一个日期选择器
【发布时间】:2012-07-25 15:41:25
【问题描述】:

我有 2 个 jquery datepickers 来选择一个日期范围。

一旦我选择了一个起始日期(从第一个日期选择器开始),我想激活第二个(到)日期选择器。

下面的代码可以做到这一点,但由于某种原因立即关闭了日期选择器。

有什么想法吗? - http://jsfiddle.net/rN4zu/

From <input type="text" id="dateFrom" />
To <input type="text" id="dateTo" /> 

jQuery

$( "#dateFrom" ).datepicker({
    minDate: 0,
    maxDate: "+2Y",
    showWeek: true,
    weekHeader: 'Wk',
    onSelect: function( selectedDate ) {
        $( "#dateTo" ).datepicker("option", "minDate", selectedDate ).focus();
    }
});

$( "#dateTo" ).datepicker({
    maxDate: "+2Y",
    showWeek: true,
    weekHeader: 'Wk'
});

【问题讨论】:

    标签: javascript jquery jquery-ui datepicker jquery-ui-datepicker


    【解决方案1】:

    http://jsfiddle.net/8YTKR/

    问题与命令相互冲突有关。 set min date 命令和.focus 同时发生,导致问题。

    好的,首先.focus 不是触发日期选择器的首选方式。首选方法是使用类似于.datepicker('show'); 的数据选择器显示方法。所以在这个例子中,我们将使用它。

    接下来我们需要确保'show' 出现在 min date 命令之后。因为该命令没有回调,所以我将使用 setTimeout

    $( "#dateFrom" ).datepicker({
        minDate: 0, 
        maxDate: "+2Y",
        showWeek: true,
        weekHeader: 'Wk',
        onSelect: function( selectedDate ) {
            $( "#dateTo" ).datepicker("option", "minDate", selectedDate );
            setTimeout(function(){
                $( "#dateTo" ).datepicker('show');
            }, 16);     
        }
    });
    
    $( "#dateTo" ).datepicker({
        maxDate: "+2Y",
        showWeek: true,
        weekHeader: 'Wk'
    });
    

    为什么要说 16 毫秒?因为它可能是最长的延迟而不显示在屏幕上。由于这个原因,16ms 是默认的 jquery 动画间隔。

    【讨论】:

    • 我正在这样做。我一准备好小提琴就发帖,然后把解释写成编辑。
    • 不完全确定这是否重要,只要最终取得好的结果。
    • @Tom 这让投票变得困难。没有解释的 JSFiddle 代码 - 不好。稍后添加小提琴的解释和/或修复 - 好!
    • @Alnitak 我这样做是因为我不知道提问者的情况。有时它会非常疯狂,所以一旦我准备好代码,我就会发布。
    • @Fresheyeball FWIW,似乎 jQuery UI 猴子修补了 .focus() 方法来做同样的事情,但使用零超时。
    【解决方案2】:
    $( "#dateTo" ).datepicker("option", "minDate", selectedDate ).focus(0);
    

    【讨论】:

    • 这似乎可行,但我不明白为什么,因为.focus() 没有记录的数字参数。请解释!
    • 我正要说同样的话@Alnitak !!
    • @Tom 啊,这是一个 jQuery UI 扩展。它与fresheyeball 的答案相同——它使用setTimeoutfocus 推迟到当前日期选择器完成自身隐藏之后。
    • @Tom 它似乎也没有记录 - 我必须阅读源代码才能找到它。
    【解决方案3】:

    我的建议是允许用户在任一日期选择器中选择他们想要的任何日期,然后在选择日期后对两个文本框进行验证。

    从第一个 datepicker 中的值设置第二个 datepicker 中的日期范围的问题是,如果用户选择了 7 月 21 日,那么第二个日期选择器将从 July 21 开始,但是当他们去将第一个日期选择器更改为 7 月 1 日,第二个日期选择器将停留在 7 月 21 日之后的日期

    【讨论】:

    • 你会看到@Rishi 回答会遇到我描述的问题
    • 我使用了@Rishi 的答案,无法得到您描述的问题。
    • 如果它有效,请使用它,我只是在过去在某些浏览器中使用 datepicker 时发现了这个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2015-01-28
    • 2021-01-05
    相关资源
    最近更新 更多