jQuery datepicker, использующий $ (this) в defaultDate

0

Существует форма с датой "от" и "до", причем каждый день, месяц и год. Я хочу заполнить datePicker каждым из этих значений dmy выбранной даты ("от" или "до"). Это выглядит так:

$('.year').datepicker({
    inline: true,
    showOtherMonths: true,
    showOn: 'button',
    buttonText: '',
    defaultDate: new Date(
        parseInt($('input[name="ydate'+$(this).attr('name').replace(/.date/, '')+'"]').val())
        ,parseInt($('input[name="mdate'+$(this).attr('name').replace(/.date/, '')+'"]').val())-1
        , parseInt($('input[name="ddate'+$(this).attr('name').replace(/.date/, '')+'"]').val())
    ),
    changeYear: true,
    onClose: function(dateText,picker) {
        var prefix = $(this).attr('name').replace(/.date/, '');

        $('input[name="ddate'+prefix+'"]').val( dateText.split(/\//)[1] );
        $('input[name="mdate'+prefix+'"]').val( dateText.split(/\//)[0] );
        $('input[name="ydate'+prefix+'"]').val( dateText.split(/\//)[2] );

    }
});

Событие onClose отлично заполняет поля ввода dmy, но функция defaultDate не работает так. Какие-либо предложения?

Теги:
datepicker

1 ответ

1
Лучший ответ

Поскольку контекст выполнения не изменяется, this все еще относится к контексту метода, в котором инициализируется datepicker.

Таким образом, решение может быть это для перебора множества .year элементов с помощью .each(), теперь внутри each обработчика this будет относиться к текущему .year элемента.

$('.year').each(function () {
    var nm = $(this).attr('name').replace(/.date/, '');
    $(this).datepicker({
        inline: true,
        showOtherMonths: true,
        showOn: 'button',
        buttonText: '',
        defaultDate: new Date(
        parseInt($('input[name="ydate' + nm + '"]').val()), parseInt($('input[name="mdate' + nm + '"]').val()) - 1, parseInt($('input[name="ddate' + nm + '"]').val())),
        changeYear: true,
        onClose: function (dateText, picker) {
            var prefix = $(this).attr('name').replace(/.date/, '');

            $('input[name="ddate' + prefix + '"]').val(dateText.split(/\//)[1]);
            $('input[name="mdate' + prefix + '"]').val(dateText.split(/\//)[0]);
            $('input[name="ydate' + prefix + '"]').val(dateText.split(/\//)[2]);

        }
    });
})
  • 0
    Большое спасибо! Я был немного смущен, почему это сработало в событии onClose. Это работает сейчас :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню