Задать вопрос
@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 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
karmis
@karmis
Вероятно потому что ты меняешь значение объекта data
js использует ссылки на переменные
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы