7

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.

Additionally, the value of days to be added changes with what has been selected in the dropdown.

Fiddle what I have so far: http://jsfiddle.net/8y4Bf/

Code from fiddle:

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
                }
            }

            });

     }

});

I have read the documentation at http://jqueryui.com/datepicker/#min-max but can't figure out how do I make only the 1st of every month available.

And do I have to fetch the value of #startdate again, add the days and then paste it into #enddate or is that value saved somewhere so I can go from there ?

4

1 回答 1

10

测试和工作!

  • 我已经改变了你的逻辑jsfiddle

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

  • 我也改进了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;
};
于 2013-10-31T23:35:42.847 回答