【问题标题】:Jquery datepicker make only 1 day selectable and copy date +x days in next inputJquery datepicker 只能选择 1 天并在下一个输入中复制日期 +x 天
【发布时间】:2026-02-06 03:35:01
【问题描述】:

I am trying to make the Jquery-UI datepicker have only 1 date available per month, which is the 1st of every month, when selected the selected date + X days, should be copied into another text input field.

此外,要添加的天数会随着下拉菜单中的选择而变化。

摆弄我目前所拥有的: http://jsfiddle.net/8y4Bf/

小提琴代码:

HTML

<div>
    <label>Select an Option:</label>
    <select id="select1">
        <option value="" disabled="disabled" selected="selected">Select an option</option>
        <option value="1">Option 1</option>
        <option value="2">Option 2</option>
    </select>
</div>
<br /><br />
<div>
    <label>Start Date:</label>
    <input type="text" id="startdate" />
    <br /><br />
    <label>End Date:</label>
    <input type="text" id="enddate" />
</div>

jQuery

$('#select1').change(function() {


    $('#startdate, #enddate').val("");


    if ($('#select1').val() == '1') {


        $('#startdate').datepicker({
            showButtonPanel: true,
            closeText: 'Close',
            dateFormat: "mm/dd/yy",
            onSelect: function(selected) {
                if (this.id == 'startdate') {

                    // Parameters 1 day only & also copy result into enddate + 5 days
                }
            }
        });
    }

     else if ($('#select1').val() == '2') {


        $('#startdate').datepicker({
            showButtonPanel: true,
            closeText: 'Close',
            dateFormat: "mm/dd/yy",
            onSelect: function(selected) {
                if (this.id == 'startdate') {

                   // Parameters 1 day only & also copy result into enddate + 7 days
                }
            }

            });

     }

});

我已阅读http://jqueryui.com/datepicker/#min-max 上的文档,但不知道如何才能使每个月的第一天可用。

我是否必须再次获取 #startdate 的值,添加天数,然后将其粘贴到 #enddate 中,或者该值是否保存在某个地方以便我可以从那里继续?

【问题讨论】:

    标签: jquery jquery-ui datepicker


    【解决方案1】:

    经过测试并且可以正常工作!

    • jsfiddle的逻辑我改了。

    • 要知道,为了实现你所需要的,datepicker必须实现beforeShowDayfunctionoverride会在component中显示的天数,然后选中@987654328 @ 必须转换为 Date object 类型才能轻松添加 5 或 7 天(这样做是因为,例如,如果您想选择每个月的最后一天,可以是 30 或 31 加 5 或7 天,如果您手动执行,您将获得 36 或 38,而不是其他月份的 date,并且还有许多其他可能性 -但这不是你的情况,我只是在解释)。

    • 我还改进了code,看看:

      现场演示: http://jsfiddle.net/oscarj24/q27EG/2/

    jQuery 代码:

    $(function() {
    
        var extraDays = 0;
        var combobox = $('#select1');
        var txtStartDate = $('#startdate');
        var txtEndDate = $('#enddate');
        var inputs = txtStartDate.add(txtEndDate);
    
        combobox.on('change', function() {
    
            inputs.val('');
    
            var val = $(this).val();
            if(val == 1) extraDays = 5;
            if(val == 2) extraDays = 7;
    
            txtStartDate.datepicker({
                showButtonPanel: true,
                closeText: 'Close',
                dateFormat: 'mm/dd/yy',
                beforeShowDay: function(date) {
    
                    /* Check for the first day */
                    if (date.getDate() == 1) { return [true, '']; } 
                    else { return [false, '', 'Unavailable']; }
                },
                onSelect: function(selected) {
    
                    /* Add extra days to the date according to 'combobox' selection */
                    var endDate = new Date(selected);
                    endDate.setDate(endDate.getDate() + extraDays);
    
                    var m = pad(endDate.getMonth() + 1, 2);
                    var d = pad(endDate.getDate(), 2);
                    var y = endDate.getFullYear();
                    var endDateStr = [m, d, y].join('/');
    
                    txtEndDate.val(endDateStr);
                }
            });
    
        });
    
    });
    
    /* This function just adds a zero to get this format: "01, 02, etc" in a number less than 10 */
    function pad(number, length) {
        var str = '' + number;
        while (str.length < length) { str = '0' + str; }
        return str;
    };
    

    【讨论】:

      最近更新 更多