@vitaliy-m

JQuery проблема в написании плагина?

Пишу свой календарь.
Чуть-чуть кода плагина
(function($) {
    var months = {
            en: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        },
        weekDays = {
            en: ['S', 'M', 'T', 'W', 'T', 'F', 'S']
        },
        defaults = {
            lang: 'en',
            cDate: '',
            cMonth: '',
            cYear: '',
            showDate: ''
        };
    var dp = {
        init: function(options) {
            var date = new Date(),
                cDate = date.getDate(),
                cMonth = date.getUTCMonth(),
                cYear = date.getFullYear();
        
            defaults.cDate = cDate;
            defaults.cMonth = cMonth;
            defaults.cYear = cYear;
            defaults.showDate = cDate + '/' + (cMonth + 1) + '/' + cYear;
            
            return this.each(function() {
                var params = $.extend(defaults, options),                
                    sDateArr = params.showDate.split("/");
                                
                params.sDate = +(sDateArr[0]);
                params.sMonth = +(sDateArr[1] - 1);
                params.sYear = +(sDateArr[2]);
                
                $(this).data('dpicker', params);                
                
                dp.getDPicker($(this), params);
            });
        },
        getDPicker: function(element) {
            var content;
            
            content = '<div class="dpicker" data-value="">';
             //вызов дополнительных методов для построения шапки, календаря, списка месяцев итд
            content += '</div>';            
            
            element.html(content);
        }
    };
    
    $.fn.dpicker = function(method) {
        if (dp[method]) {
            return dp[ method ].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return dp.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' are not exist');
        }
    };
})(jQuery);


Собственно сам вызов:
$('.date-from').dpicker({}); - тут строим календарь для сегодняшнего дня
$('.date-to').dpicker({lang: 'ru', showDate: '09/10/13'}); - тут (для наглядности) для какой-то даты, передав параметры

Проблема:
в коде при формировании календаря я к родителю в data('dpicker') сохраняю данные этого календаря. То есть для первого элемента сохранится дефолтный объект, для второго - уже с той датой и языком который я выбрал. Строятся они хорошо, но почему-то у первого элемента перезаписывается поле data на то что должно быть у второго. Кто знает почему так?

Спасибо
  • Вопрос задан
  • 2280 просмотров
Решения вопроса 1
karmis
@karmis
Вероятно потому что ты меняешь значение объекта data
js использует ссылки на переменные
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы