Как получить указатель даты при обновлении - PullRequest
0 голосов
/ 01 сентября 2011

У меня есть средство выбора даты, которое выделяет выбранную неделю.Это использует запрос ajax.Вот где у меня проблемы.Когда я выбираю неделю, т.е. 29/08/11, и страница обновляется, выделенная неделя больше не выделяется.

Datepicker.js

$(function()
{
    var startDate;
    var endDate;
    var selectCurrentWeek = function()
    {
        window.setTimeout(function () { $('.week-picker').find('.ui-datepicker-current-day a').addClass('ui-state-active')}, 1000);
    }
    function check(d) {
        if(d.length() == 2) {
            dd = d;
            return dd;
        } else {
            dd = "0" + myDateParts[0];
            return dd;
        }
    }

    var selectedWeek;//remember which week the user selected here

    $('.week-picker').datepicker( {
        beforeShowDay: $.datepicker.noWeekends,
        showOtherMonths: true,
        selectOtherMonths: true,
        onSelect: function(dateText, inst) {
            var date = $(this).datepicker('getDate');
            startDate = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay() + 1);
            endDate = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay() + 6);
            var dateFormat = 'yy-mm-dd'
            var newDate = $('#startDate').text($.datepicker.formatDate( dateFormat, startDate, inst.settings ));

            var oldDate = document.getElementById('startDate');
            var date_textnode = oldDate.firstChild;
            var date_text = date_textnode.data;
            myDateParts = date_text.split("-");

            var dd = myDateParts[2];

            var mm = myDateParts[1];

            var yy = myDateParts[0];

            selectCurrentWeek();

            window.location.href = "/timesheet?week_commencing=" + yy + "-" + mm + "-" + dd; << 

На этом этапе выше это окно обновляется и получает URL-адрес.Таким образом, когда я выбираю дату, она выводит, например, следующее: http://0.0.0.0:3000/timesheet?week_commencing=2011-09-05

        },
        beforeShowDay: function(date) {

            var cssClass = '';
            if(date >= startDate && date <= endDate)
                cssClass = 'ui-datepicker-current-day';
            return [true, cssClass];
        },
        onChangeMonthYear: function(year, month, inst) {
            selectCurrentWeek();
        }
    });


    $('.week-picker .ui-datepicker-calendar tr').live('mousemove', function() { $(this).find('td a').addClass('ui-state-hover'); });
    $('.week-picker .ui-datepicker-calendar tr').live('mouseleave', function() { $(this).find('td a').removeClass('ui-state-hover'); });


});

index.html.erb

window.onload = function getURL(){
    var url = document.location.href;
    urlSplit = url.split("/timesheet");

    if(urlSplit[1]== "")
    {
        var d = getMonday(new Date());

        dd = zeroPad(d.getDate(),2);
        mm = zeroPad(d.getMonth()+1,2);
        yy = d.getFullYear();

        document.getElementById('startDate').innerHTML = yy + "-" + mm + "-" + dd;
        //window.location.href = "/timesheet?week_commencing=" + yy + "-" + mm + "-" + dd;
    }
    else
    {
        week = url.split("week_commencing=");
        //return week[1];
        document.getElementById('startDate').innerHTML = week[1];
    }
}

Примечание Функция URL window.onload получает неделю, начинающуюся с URL

Jsfiddle - включая средство выбора даты

http://jsfiddle.net/YQ2Zw/12/

Обновление

enter image description here

1 Ответ

0 голосов
/ 01 сентября 2011

Вы можете использовать defaultDate, чтобы установить начальную дату, выбранную в указателе даты, и смоделировать событие click в календаре для выделения недели:

var selectDate = '09/29/2011';

$('.week-picker').datepicker({
    defaultDate: selectDate
}).click(function(event) {
    // highlight the TR
    $(".ui-datepicker-current-day").parent().addClass('highlight');

    // highlight the TD > A
    $(".ui-datepicker-current-day:eq(0)").siblings().find('a').addClass('white');
}).click();

Пример: http://jsfiddle.net/william/YQ2Zw/15/


Обновление

Предполагая, что Datepicker.js загружен в timesheet, вы сможете сделать это еще с двумя строками:

window.onload = function getURL(){
    var url = document.location.href;
    urlSplit = url.split("/timesheet");

    if(urlSplit[1]== "")
    {
        var d = getMonday(new Date());

        dd = zeroPad(d.getDate(),2);
        mm = zeroPad(d.getMonth()+1,2);
        yy = d.getFullYear();

        document.getElementById('startDate').innerHTML = yy + "-" + mm + "-" + dd;
        //window.location.href = "/timesheet?week_commencing=" + yy + "-" + mm + "-" + dd;

        $('.week-picker').datepicker({
            defaultDate: mm + '/' + dd + '/' + yy
        }).click();
    }
    else
    {
        week = url.split("week_commencing=");
        //return week[1];
        document.getElementById('startDate').innerHTML = week[1];
    }
}
...