Показать сообщение отдельно
  #1 (permalink)  
Старый 09.06.2016, 11:09
Аспирант
Отправить личное сообщение для maxapet Посмотреть профиль Найти все сообщения от maxapet
 
Регистрация: 27.08.2015
Сообщений: 43

Что делать с options
Есть вот такой плагин для выбора цвета:ра цвета:
(function ($){
	var defaults = {colors: new Array ("#000000", "#808080", "#8B0000", "#FF0000", "#FFA500", "#FFFF00", "#008000", "#87CEEB", "#0000FF", "#FF00FF",
		"#FFFFFF", "#C0C0C0", "#A52A2A", "#FFC0CB", "#FFD700", "#EEE8AA", "#00FF00", "#ADD8E6", "#000080", "#DDA0DD"),
		selectedColorIdx: 0,
		click: function (color) {}
	};
	var methods = {
		init: function(options) {
			return this.each(function(){
v				var settings = $.extend({}, defaults, options);
				var lineCnt = 2;
				var cellsInLine = settings.colors.length / lineCnt;

				var tbl = $("<table class='color-picker-tbl'/>");
				for(l=0; l < lineCnt; l++){
					var tr = $("<tr />");
					tr.appendTo(tbl);
					for(c=0; c < cellsInLine; c++){
						var td = $("<td style='background-color: " + settings.colors[l * cellsInLine + c] + ";' class='color-picker-mask'></td>").appendTo(tr);
					}
				}

				$(this).append(tbl);
				var $cells = $(this).find(".color-picker-tbl td");
				$cells.each(function(i) {
					$(this).click(function() {
						if (i != settings.selectedColorIdx){
							$cells.eq(settings.selectedColorIdx).removeClass("selected").removeClass("selected-color-mask-1").removeClass("selected-color-mask-2");
							$(this).addClass("selected").addClass(isDark(settings.colors[i]) ? "selected-color-mask-1" : "selected-color-mask-2");
							settings.selectedColorIdx = i;
						}
						settings.click(settings.colors[i]);
					});
				});
			});
		},
		setColor: function(color) {
			if (color[0] != "#")
				color = "#" + color;
			this.find(".color-picker-tbl td").each(function(i) {
				alert($(this).css("background-color"));
				if ($(this).css("color") == color) {
					$(this).trigger("click");
				}
			});
		}
	}
    $.fn.colorPicker = function(method){
		var settings;
		// немного магии
		if ( methods[method] ) {
			// если запрашиваемый метод существует, мы его вызываем
			// все параметры, кроме имени метода прийдут в метод
			// this так же перекочует в метод
			return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
		} else if ( typeof method === 'object' || ! method ) {
			// если первым параметром идет объект, либо совсем пусто
			// выполняем метод init
			return methods.init.apply( this, arguments );
		} else {
			// если ничего не получилось
			$.error( 'Метод "' +  method + '" не найден в плагине jQuery.mySimplePlugin' );
		}
   }
    $cells.eq(settings.selectedColorIdx).trigger("click");
    return this.each(colorPicker);
})(jQuery);

/**
 * Return true if color is dark, false otherwise.
 * (C) 2008 Syronex / J.M. Rosengard
 **/
function isDark(color){
    var colr = parseInt(color.substr(1), 16);
    return (colr >>> 16) // R
    + ((colr >>> 8) & 0x00ff) // G 
    + (colr & 0x0000ff) // B
    < 500;
}


Если settings объявить в самом внешней области, то он становится общим для всех экземпляров, а если объявлять его так, как это написано, то он недоступен в методе setColor.

Как сделать так, чтобы settings был свой для каждого экземпляра?
Ответить с цитированием