当用户选择不是当前日期的日期时,如何启用所有选项?

发布于 2025-02-03 21:18:48 字数 2104 浏览 3 评论 0原文

我正在尝试使DatePicker与Select选项一起使用,因此,如果用户选择不是当前日期的日期,则不会调用该函数,以便用户可以在任何时间选择他们想要的时间。

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

 Delivery Date:
<input id="datepicker" type="text" name="attributes[Delivery Date]" />

<select id="time1">
    <option value="" disabled selected>Select delivery time</option>
    <option value="8-10">8:00 AM - 10:00 AM</option>
    <option value="13-15">1:00 PM - 3:00 PM</option>
    <option value="15-19">3:00 PM - 7:00 PM</option>
</select>

<script>
    $(function () {
        $("#datepicker").datepicker({
            dateFormat: 'dd/mm/yy',
            minDate: 0,
            maxDate: '+1y',
            onSelect: function (dateText, inst) {
                var date = $("#datepicker").datepicker('getDate'),
                    day = date.getDate();
                var d2 = new Date();
                if (day == d2) {
                    let element = document.getElementById('select-a-delivery-time');
                    let validateInterval = (element) => {
                        let currentDate = new Date();
                        let currentHour = currentDate.getHours();

                        for (let opt of element.options) {
                            let timeOpt = opt.value.split('-');
                            if (Array.isArray(timeOpt) && timeOpt.length > 1) {
                                opt.disabled = (+timeOpt[0] <= currentHour && +timeOpt[1] > currentHour) ? false : true;
                            }

                        }

                    }
                } else {
                    opt.disabled = false;
                }
                validateInterval(element);
            }
        });
    });
</script>

I am trying to get the datepicker to work with the select options, so if the user selects a date that's not the current date, then the function will not be called so the user can select any time they want.

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

 Delivery Date:
<input id="datepicker" type="text" name="attributes[Delivery Date]" />

<select id="time1">
    <option value="" disabled selected>Select delivery time</option>
    <option value="8-10">8:00 AM - 10:00 AM</option>
    <option value="13-15">1:00 PM - 3:00 PM</option>
    <option value="15-19">3:00 PM - 7:00 PM</option>
</select>

<script>
    $(function () {
        $("#datepicker").datepicker({
            dateFormat: 'dd/mm/yy',
            minDate: 0,
            maxDate: '+1y',
            onSelect: function (dateText, inst) {
                var date = $("#datepicker").datepicker('getDate'),
                    day = date.getDate();
                var d2 = new Date();
                if (day == d2) {
                    let element = document.getElementById('select-a-delivery-time');
                    let validateInterval = (element) => {
                        let currentDate = new Date();
                        let currentHour = currentDate.getHours();

                        for (let opt of element.options) {
                            let timeOpt = opt.value.split('-');
                            if (Array.isArray(timeOpt) && timeOpt.length > 1) {
                                opt.disabled = (+timeOpt[0] <= currentHour && +timeOpt[1] > currentHour) ? false : true;
                            }

                        }

                    }
                } else {
                    opt.disabled = false;
                }
                validateInterval(element);
            }
        });
    });
</script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

木有鱼丸 2025-02-10 21:18:48

逻辑可能有一些缺陷。由于该功能是禁用元素,因此您需要再次调用它以启用它们:

$(function ()
{
  $("#datepicker").datepicker({
    dateFormat: 'dd/mm/yy',
    minDate: 0,
    maxDate: '+1y',
    onSelect: function (dateText, inst)
    {
      var date = $("#datepicker").datepicker('getDate');
      let element = document.getElementById('time1');
      let validateInterval = (element) =>
      {
        let currentDate = new Date();
        let currentHour = currentDate.getHours();
        let isToday = currentDate.getFullYear() == date.getFullYear()
                      && currentDate.getMonth() == date.getMonth()
                      && currentDate.getDate() == date.getDate();

        element.value = ""; //remove selection
        for (const opt of element.options)
        {
          if (!opt.value) continue;
          const timeOpt = opt.value.split('-');
          opt.disabled = isToday && (+timeOpt[0] > currentHour || +timeOpt[1] <= currentHour);

          if (!opt.disabled && element.value == "") //pre-select first available
            element.value = opt.value;
        }
      };
      validateInterval(element);
    }
  });
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

 Delivery Date:
<input id="datepicker" type="text" name="attributes[Delivery Date]" />

<select id="time1">
    <option value="" disabled>Select delivery time</option>
    <option value="8-10">8:00 AM - 10:00 AM</option>
    <option value="13-15">1:00 PM - 3:00 PM</option>
    <option value="15-19">3:00 PM - 7:00 PM</option>
    <option value="0-23">0:00 AM - 23:00 PM</option>
</select>

<script>

</script>

You may have a little flaw in the logic. Since the function is disabling elements, you will need call it again to enable them:

$(function ()
{
  $("#datepicker").datepicker({
    dateFormat: 'dd/mm/yy',
    minDate: 0,
    maxDate: '+1y',
    onSelect: function (dateText, inst)
    {
      var date = $("#datepicker").datepicker('getDate');
      let element = document.getElementById('time1');
      let validateInterval = (element) =>
      {
        let currentDate = new Date();
        let currentHour = currentDate.getHours();
        let isToday = currentDate.getFullYear() == date.getFullYear()
                      && currentDate.getMonth() == date.getMonth()
                      && currentDate.getDate() == date.getDate();

        element.value = ""; //remove selection
        for (const opt of element.options)
        {
          if (!opt.value) continue;
          const timeOpt = opt.value.split('-');
          opt.disabled = isToday && (+timeOpt[0] > currentHour || +timeOpt[1] <= currentHour);

          if (!opt.disabled && element.value == "") //pre-select first available
            element.value = opt.value;
        }
      };
      validateInterval(element);
    }
  });
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

 Delivery Date:
<input id="datepicker" type="text" name="attributes[Delivery Date]" />

<select id="time1">
    <option value="" disabled>Select delivery time</option>
    <option value="8-10">8:00 AM - 10:00 AM</option>
    <option value="13-15">1:00 PM - 3:00 PM</option>
    <option value="15-19">3:00 PM - 7:00 PM</option>
    <option value="0-23">0:00 AM - 23:00 PM</option>
</select>

<script>

</script>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文