jQuery Datepicker, выберите несколько дат и отметьте их через CSS во время выбора, навсегда

поэтому я потратил день на разработку и чтение (т. е. наоборот), чтобы мой jQuery datepicker мог выбирать и выделять несколько дат.

Для этого мне удалось записать выбранные даты в массив, который визуализируется в простом текстовом поле.

Что мне не удалось, так это навсегда изменить вид выбранной даты в datepicker.

Я реализовал опцию "beforeShowDay:", которая работает правильно после загрузки datepicker, но, конечно, не вызывается непосредственно при выборе даты. Для этого, как я догадывался, мне нужно обновить представление onSelect, но обновление не работает должным образом. Прямо сейчас у меня есть несколько небольших методов обработки массива данных.

После добавления или удаления даты я пытаюсь обновить дату.

После выбора даты я либо добавляю ее, либо удаляю из массива дат. Кроме того, onSelect, я подбираю выбранный день и пытаюсь добавитьClass ().

Но опять же, я думаю, что я что-то упустил полностью, так как это не отображается в моем списке дат.

Вот мой код на данный момент:

var dates = new Array();

function addDate(date) {
    if (jQuery.inArray(date, dates) < 0 && date) {
        dates.push(date);
    }
}

function removeDate(index) {
    dates.splice(index, 1);
}

// Adds a date if we don't have it yet, else remove it and update the dates
// textfield
function addOrRemoveDate(date) {
    var index = jQuery.inArray(date, dates);
    if (index >= 0) {
        removeDate(index);
        updateDatesField(dates);
    } else {
        addDate(date);
        updateDatesField(dates);
    }
    jQuery(calContainer).datepicker("refresh");
}


    var calContainer = document.getElementById("calendar-container");

    jQuery(calContainer).datepicker({
        minDate : new Date(),
        dateFormat : "@",
        onSelect : function(dateText, inst) {
            addOrRemoveDate(dateText);

            jQuery(".ui-datepicker-calendar tbody tr td a").each(function() {
                if (jQuery(this).text() == inst.selectedDay) {
                    jQuery(this).addClass("ui-state-highlight");
                    jQuery(this).parent().addClass("selected");
                }
            });
            // addTimeSelectorColumns(dates);
        },
        beforeShowDay : function(_date) {
            var gotDate = -1;
            for ( var index = 0; index < dates.length; index++) {
                if (_date.getTime() == dates[index]) {
                    gotDate = 1;
                } else {
                    gotDate = -1;
                }
            }

            if (gotDate >= 0) {
                return [ true, "ui-datepicker-today", "Event Name" ];
            }
            return [ true, "" ];
        }
    });
function updateDatesField(dates) {

    if (dates.length > 0) {
        var tmpDatesStrArr = new Array();
        var dateString = "";
        var datesField = document.getElementById("dates");

        for ( var index = 0; index < dates.length; index++) {
            var dateNum = dates[index];

            var tmpDate = new Date();
            tmpDate.setTime(dateNum);

            dateString = tmpDate.getDate() + "." + tmpDate.getMonth() + "."
                    + tmpDate.getFullYear();
            tmpDatesStrArr.push(dateString);
        }

        jQuery(datesField).val(tmpDatesStrArr);
    }
}

(Я все еще новичок в Javascript / jQuery, поэтому любая помощь или намеки на мое кодирование приветствуются, кстати ...)


person chris polzer    schedule 15.08.2011    source источник


Ответы (1)


Это зависит от того, хотите ли вы придерживаться jQuery UI или нет. Если вы открыты для другой библиотеки, существует jQuery Datepicker, который поддерживает множественный выбор: jquery.datePicker с включенным множественным выбором. Это может сэкономить вам время на возню с пользовательским интерфейсом jQuery, поскольку он изначально не поддерживает множественный выбор.

РЕДАКТИРОВАТЬ:

Если ваша основная библиотека - это не jQuery, я думаю, вам следует поискать автономную или зависимую от прототипа библиотеку. JS Calendar выглядит многообещающим. Он изначально поддерживает множественный выбор путем обнаружения клавиши Ctrl.

person William Niu    schedule 16.08.2011
comment
Что ж, ограничения таковы: 1.) что прототип и скриптакул также включены в проект. 2.) датапикер размещается в строке. Но я попробую, спасибо! - person chris polzer; 16.08.2011