【问题标题】:Modifying linked datetimepicker minDate maxDate function修改链接的 datetimepicker minDate maxDate 函数
【发布时间】:2015-08-29 15:09:50
【问题描述】:

我已经实现了一对链接的datetimepickers。 min 和 maxDate 函数工作正常,但我想对其进行修改,以便即使用户在一个输入中选择一个超出限制的日期,另一个输入也不会阻止用户这样做,而是相应地更新 min 或 maxDate。 (例如,如果用户选择了“上午 10 点”和“下午 2 点”并且他/她更改为“下午 3 点”,则第二个字段将更改为下午 4 点。)我不确定我该怎么做?

选择器 html:

<div class='col-lg-6'>
    <div class="form-group">
        <div class='input-group date' id='datetimepicker6'>
            <input type='text' class="form-control" />
            <span class="input-group-addon">
                <span class="glyphicon glyphicon-calendar"></span>
            </span>
        </div>
    </div>
</div>
<div class='col-lg-6'>
    <div class="form-group">
        <div class='input-group date' id='datetimepicker7'>
            <input type='text' class="form-control" />
            <span class="input-group-addon">
                <span class="glyphicon glyphicon-calendar"></span>
            </span>
        </div>
    </div>
</div>

js:

$(function () {
    $('#datetimepicker6').datetimepicker();
    $('#datetimepicker7').datetimepicker({
        //useCurrent: false //Important! See issue #1075
        //btw, it is suggested to set useCurrent to false but the picker is not working when it's set to false so I didn't..
    });
    $("#datetimepicker6").on("dp.change", function (e) {
        $('#datetimepicker7').data("DateTimePicker").minDate(e.date);
    });
    $("#datetimepicker7").on("dp.change", function (e) {
        $('#datetimepicker6').data("DateTimePicker").maxDate(e.date);
    });
});

已编辑:

我尝试了一些东西,但似乎不相关:

$(function () {
    $('#datetimepicker1').datetimepicker({
        format: 'LT'
    });
    $('#datetimepicker2').datetimepicker({
    //useCurrent: false //Important! See issue #1075
        format: 'LT'
    });
    //$("#datetimepicker1").on("dp.change", function (e) {
    //    $('#datetimepicker2').data("DateTimePicker").minDate(e.date);
    //});
    //$("#datetimepicker2").on("dp.change", function (e) {
    //    $('#datetimepicker1').data("DateTimePicker").maxDate(e.date);
    //});
});
$('#datetimepicker1').datetimepicker({
    //minDate: 0, // to disable past dates (skip if not needed)
    onClose: function(selectedDate) {
    // Set the minDate of 'to' as the selectedDate of 'from'
        $('#datetimepicker2').data("DateTimePicker").minDate(selectedDate);                                       
    }
});
$('#datetimepicker2').datetimepicker();

【问题讨论】:

  • 你能提供一个小提琴
  • here it is 但它不起作用我不知道为什么.. 我上传了它要求的所有内容here
  • 它不起作用,因为来自github的文件不能是外部源?
  • Here 是工作小提琴,但它仅适用于日期而不是 time
  • 啊,它起作用了,抱歉——我只是被界面弄糊涂了。

标签: javascript jquery twitter-bootstrap


【解决方案1】:

这是工作代码。

Updated Demo

HTML

<div class="container">
    <div class='col-md-5'>
        <div class="form-group">
            <div class='input-group date' id='datetimepicker6'>
                <input type='text' class="form-control" />
                <span class="input-group-addon">
                    <span class="glyphicon glyphicon-calendar"></span>
                </span>
            </div>
        </div>
    </div>
    <div class='col-md-5'>
        <div class="form-group">
            <div class='input-group date' id='datetimepicker7'>
                <input type='text' class="form-control" />
                <span class="input-group-addon">
                    <span class="glyphicon glyphicon-calendar"></span>
                </span>
            </div>
        </div>
    </div>
</div>

JS

var timeDiff;
$(function () {
    $('#datetimepicker6').datetimepicker();
    $('#datetimepicker7').datetimepicker({
        useCurrent: false //Important! See issue #1075
    });
    $("#datetimepicker6").on("dp.change", function (e) {
         if (timeDiff) {
        $('#datetimepicker7').data("DateTimePicker").date(e.date.add(timeDiff, 's'));    
        $('#datetimepicker7').data("DateTimePicker").minDate(false);
    } else $('#datetimepicker7').data("DateTimePicker").minDate(e.date);
    });
    $("#datetimepicker7").on("dp.change", function (e) {    
        var CurrStartDate = new Date($('#datetimepicker6').data("DateTimePicker").date());
        var CurrEndDate = new Date($('#datetimepicker7').data("DateTimePicker").date());
        if (CurrEndDate) {
            timeDiff = (CurrEndDate - CurrStartDate) / 1000;
        }
        $('#datetimepicker6').data("DateTimePicker").maxDate(e.date);
    });
});

注意:这里根据您的需要修改了我的代码,但是当第一个选择器更改时,我无法在第二个 datetimepicker 上设置 mindate,所以我只是在第二个时清除 mindate选择器。你最好试一试。

【讨论】:

  • 恐怕我的问题是我要修改代码。现在,如果用户已经设置了 minDate 和 maxDate,则不允许他/她将 minDate 更改为超过 maxDate,只有当 maxDate 被推迟时。我希望修改代码,以便当用户更新超过 maxDate 的 minDate 时,maxDate 会自动向前推送。例如,如果用户已经选择了“从下午 3 点到下午 4 点”,如果她/他更改为“下午 5 点”,该功能将允许更改并将“到下午 4 点”推送到喜欢“下午 6 点”。不知道我解释的对不对。
  • 我知道了,给我一些时间@AlvinMok
  • 非常感谢@JSantosh。最后我简单地删除了 min 和 maxDate 并做了this。你的建议很有帮助。再次感谢。哦,你可以看到我的代码非常重复和凌乱..关于如何完善它的任何建议?
  • 很高兴为您提供帮助 :)。要清理您的代码,只需查看jQuery Docs,了解我们如何使用选择器等。
【解决方案2】:

这里已经在StackOverFlow 上提出了问题,该问题显示了如何动态更改选项。

【讨论】:

  • 谢谢,但是,我不确定我可以如何使用该帖子中的解决方案来解决它。你能在帖子中看到我更新的代码(已编辑)并告诉我哪里出错了吗?
猜你喜欢
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
相关资源
最近更新 更多