javascript - jquery 类选择器函数不接受日期作为参数

标签 javascript jquery date datepicker

我正在使用一个函数,它可以成功计算并(应该成功)返回星期二的日期(如果今天是星期二),如果今天是星期三,则返回星期三的日期,如果今天是其他日子,则应该在下星期二返回。此函数用于将此日期放入日期选择器输入的默认值中。我已经验证该函数实际上确实计算了要使用的正确日期。但是,当将返回值传递给选择器的参数时,输入对象中不会显示日期。

我尝试在选择器函数的第二个参数中输入字符串和数字,而不是 setDate(),但它仍然不显示任何内容。

有关导致此问题的历史,您可以引用此问题 Original question that led to this question

<!DOCTYPE html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>My Title</title>
    <!-- for datepicker -->
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.17/jquery-ui.min.js"></script>
    <!-- for timepicker -->
    <script src="//cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.min.js"></script>
    <!-- for momentjs -->    
    <script src="//momentjs.com/downloads/moment.min.js"/></script>
    <script src="//momentjs.com/downloads/moment-with-locales.min.js"></script>

    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.min.css" />
    <script type="text/javascript">   
        $(document).ready(function(){
            $( ".datepicker" ).datepicker({
                minDate:'0',
                changeMonth:true,
                changeYear:true,
            beforeShowDay:
                  function(dt)
                  {
                      return [dt.getDay() === 2 || dt.getDay() === 3, ""];
                  }});
            });

        // function moment().isoWeekday is from Momentjs script source above.
        // to automatically set the date to the next tuesday or wednesday if not already one of those days.
        function setDate() {
            var today = moment().isoWeekday(); //or just = new Date().getDay();
            var timestamp;
            if (today <= 2) {
                timestamp = moment().isoWeekday(2);
            } else if (today === 3) {
                timestamp = moment().isoWeekday(3);
            } else {
                timestamp = moment().add(1, 'weeks').isoWeekday(2);
            }
            document.write(new Date(timestamp));
            return new Date(timestamp);
        }
        // Problem occurs here: it's like setDate() wont' give datepicker something it can display.

        $('.datepicker').datepicker("setDate", setDate());            


        $(document).ready(function(){
            $('input.timepicker').timepicker({
                timeFormat: 'h:mm p',
                interval: 90,
                minTime: '9',
                maxTime: '10:30am',
                defaultTime: '9',
                startTime: '9:00',
                dynamic: false,
                dropdown: true,
                scrollbar: false                
            });
        });
    </script>
</head>
<body>

<form method="POST">
  <div style='margin:0 auto; text-align:center;'>
    <label>Appointment Date: </label>
    <input type="hidden" name="action" value="list_appointments" />
    <input type="text" id="datepicker" name="date" class="datepicker" />
    <input type="submit" value="Refresh List" name="Update" />
    <br />
  </div>
</form>
<body>

最佳答案

我相信这就是您所需要的。请记住将您的函数调用保持在同一文档加载函数中,即 $(document.ready)。

    <script type="text/javascript">   
        $(document).ready(function() {
            $( ".datepicker" ).datepicker({
                minDate:'0',
                changeMonth:true,
                changeYear:true,
                beforeShowDay: function(dt)
                  {
                      return [dt.getDay() === 2 || dt.getDay() === 3, ""];
                  }
            });

            $('input.timepicker').timepicker({
                timeFormat: 'h:mm p',
                interval: 90,
                minTime: '9',
                maxTime: '10:30am',
                defaultTime: '9',
                startTime: '9:00',
                dynamic: false,
                dropdown: true,
                scrollbar: false                
            });

            function setDate() {
                var today = moment().isoWeekday(); //or just = new Date().getDay();
                var timestamp;
                if (today <= 2) {
                    timestamp = moment().isoWeekday(2);
                } else if (today === 3) {
                    timestamp = moment().isoWeekday(3);
                } else {
                    timestamp = moment().add(1, 'weeks').isoWeekday(2);
                }
                return new Date(timestamp);
            }

            $('.datepicker').datepicker("setDate", setDate());          
        });

        // function moment().isoWeekday is from Momentjs script source above.
        // to automatically set the date to the next tuesday or wednesday if not already one of those days.

        // Problem occurs here: it's like setDate() wont' give datepicker something it can display.     
    </script>

关于javascript - jquery 类选择器函数不接受日期作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44893080/

相关文章:

javascript - 铁路由器 : Pass data to client via meteor method

php - 更新下拉列表的内容 Javascript/PHP

javascript - 使用 FullCalendar.js 在多个日历上创建事件

javascript - 使用另一个日期数组删除日期数组

javascript - 更新时的 Nativescript 日志 slider 值

javascript - 我们如何在 Canvas 上加载本地镜像?

javascript - 如果键不存在,如何在 Node js数组中插入新对象

javascript - 在 IMG 标签中设置从 Cordova 相机插件检索的图像

java - 在 Calendar 实例上设置 TimeZone ,并且在调用 getTime() 时,时间不会根据时区更新

postgresql - 在 PostgreSQL 中使用 IYYY 的日期格式给出了奇怪的结果