 
			
				11.01.2014, 19:29
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.01.2014 
					
					
					
						Сообщений: 10
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Фильтр "мусора" в массиве
			 
			
		
		
		
		Всем привет. Есть одна не понятка с jquery.  
Есть ассоциативный массив 
 
var datas = {"jshop_attr_id12":["22-1-2014","23-1-2014","24-1-2014","28-1-2014","29-1-2014","30-1-2014","31-1-2014"],"jshop_attr_id16":["9-1-2014","10-1-2014","28-1-2014","29-1-2014","30-1-2014","31-1-2014"]};
Отдаю при построении в таком виде 
 
var datas = '.json_encode ($combo_html).';
 
Есть на странице  радио кнопки, где id кнопки === ключ массива. 
  
<span id='block_attr_sel_1'>
 <span class="input_type_radio"><input type="radio" name="jshop_attr_id[1]" id="jshop_attr_id11" value="1" checked="checked" onclick="setAttrValue('1', this.value);"> <label for="jshop_attr_id11"><span class='radio_attr_label'>22</span></label></span>
<span class="input_type_radio"><input type="radio" name="jshop_attr_id[1]" id="jshop_attr_id15" value="5" onclick="setAttrValue('1', this.value);"> <label for="jshop_attr_id15"><span class='radio_attr_label'>44</span></label></span>
<span class="input_type_radio"><input type="radio" name="jshop_attr_id[1]" id="jshop_attr_id16" value="6" onclick="setAttrValue('1', this.value);"> <label for="jshop_attr_id16"><span class='radio_attr_label'>55</span></label></span></span>
Пытаюсь обработать событие кнопки 
 
jQuery(document).ready(function(){
			var work_arr;
			$('#block_attr_sel_1').on('change','input', function ()       {
				
				var tmp = this.id;
				console.log(tmp);
				work_arr = datas[this.id];
				if (typeof datas[this.id] !== "undefined") {
					work_arr = work_arr.filter(function (value) {
						if (typeof value === "string") {
							return value
						};
					});
					
					console.log(work_arr);
				}
			});
В html коде страницы вижу
 
var datas = {"jshop_attr_id12":["22-1-2014","23-1-2014","24-1-2014","28-1-2014","29-1-2014","30-1-2014","31-1-2014"],"jshop_attr_id16":["9-1-2014","10-1-2014","28-1-2014","29-1-2014","30-1-2014","31-1-2014"]};
Клацаю по кнопкам, в консоли вижу 
jshop_attr_id15  
jshop_attr_id16  
["9-1-2014", "10-1-2014", $family: function, $constructor: function, each: function, clone: function, clean: function…]
 
jshop_attr_id15  
jshop_attr_id11  
jshop_attr_id16  
["9-1-2014", "10-1-2014", $family: function, $constructor: function, each: function, clone: function, clean: function…] 
Все массивы дат затем уходят в jquery датапикер.
 
Внимание вопрос.  
1. Что млять за ... вот здесь:   $family: function, $constructor: function, each: function, clone: function, clean: function… 
2. Как от этого избавиться? Потому, что такой массив датапикер жрать отказывается.
 
Все работает на jquery 1.10.3 + joomla 3.2.0 + joomshopping 4.3.3, от браузера не зависит.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось TITO, 11.01.2014 в 19:58.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				11.01.2014, 19:47
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 TITO, 
 где 18 строка скрипта? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				11.01.2014, 20:00
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.01.2014 
					
					
					
						Сообщений: 10
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Массив выводиться весь, это я недоглядел, но в конце все равно мусор. Я не нашел в редакторе местном спойлера, так что простите за простыню) 
Здесь весь код
 
<script type="text/javascript">
		var datas = {"jshop_attr_id11":["1-1-2014","2-1-2014","3-1-2014"],"jshop_attr_id12":["1-1-2014","2-1-2014","3-1-2014","4-1-2014","5-1-2014","6-1-2014","7-1-2014","8-1-2014","9-1-2014","10-1-2014","11-1-2014","12-1-2014","13-1-2014","14-1-2014","15-1-2014","16-1-2014","17-1-2014","18-1-2014","19-1-2014","20-1-2014","21-1-2014","22-1-2014","23-1-2014","24-1-2014","25-1-2014","26-1-2014","27-1-2014","28-1-2014","29-1-2014","30-1-2014","31-1-2014"],"jshop_attr_id15":["15-1-2014","16-1-2014","17-1-2014"]};
		var keys = Object.keys(datas);
		if(keys[0]==="jshop_attr_id"){ // проверка что у товара есть какой либо атрибут, если нет то массив в виде 
//var datas = {"jshop_attr_id":["1-1-2014","2-1-2014","3-1-2014"]};
			var work_arr = datas.jshop_attr_id; // и кстати в таком случаем все хорошо работает!
		}
		
		function available(dt)
		{	
			/*console.log(work_arr);*/
			dmy = dt.getDate() + "-" + (dt.getMonth()+1) + "-" + dt.getFullYear();
			
			if(jQuery.inArray(dmy,work_arr) !== -1)
			{
				return [false, "","UNAvailable"];
			}else{
				return [true,"","Available"];
			}
		}
	
		
		jQuery(document).ready(function(){
			var work_arr;
			$('#block_attr_sel_1').on('change', 'input', function () {
				
				var tmp = this.id;
				console.log(tmp);
				/*work_arr=datas.jshop_attr_id11;*/
				
				work_arr = datas[this.id];
				if (typeof datas[this.id] !== "undefined") {
					work_arr = work_arr.filter(function (value) {
						if (typeof value === "string") {
							return value
						};
					});
					
					console.log(work_arr);
					
					
				}
				
			});
	
			$.datepicker.setDefaults($.extend($.datepicker.regional["ru"]));
			$( "#freeattribut1" ).datepicker({
					  
					  beforeShowDay: available,
					  
					  //defaultDate: "+1w",
					  dateFormat: 'dd.mm.yy',
					  changeMonth: true,
					  numberOfMonths: 1,
					  onClose: function( selectedDate ) {
							$( "#freeattribut2" ).datepicker( "option", "minDate", selectedDate );
						}
					});
			$( "#freeattribut2" ).datepicker({
					  beforeShowDay: available,
					  
					  defaultDate: "+1w",
					  changeMonth: true,
					  dateFormat: 'dd.mm.yy',
					  numberOfMonths: 1,
					  onClose: function( selectedDate ) {
						$( "#freeattribut1" ).datepicker( "option", "maxDate", selectedDate );
					  }
					});
		});
</script>
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось TITO, 11.01.2014 в 20:21.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				11.01.2014, 20:05
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 TITO, 
 а зачем слеши в 28, 57 и 69 строках? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				11.01.2014, 20:07
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от TITO
			
		
	 | 
 
	| 
		$( "#'.$free_attr_id_0.'" ).
	 | 
 
	
 
 это что за селектор?можно чистый html?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				11.01.2014, 20:09
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.01.2014 
					
					
					
						Сообщений: 10
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Отредактировал. 
Прошу заметить, что в случае когда на странице кнопок нет, и массив формируется в виде 
 
var datas = {"jshop_attr_id":["1-1-2014","2-1-2014","3-1-2014"]};
var keys = Object.keys(datas);
if(keys[0]==="jshop_attr_id"){ // И проходит проверка, что у товара нет аттрибутов
            var work_arr = datas.jshop_attr_id; 
}
Все замечательно отрабатывает.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось TITO, 11.01.2014 в 20:28.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				11.01.2014, 20:25
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 TITO, вашу ошибку воспроизвести неудалось ))) нужен живой макет 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				11.01.2014, 20:36
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 05.01.2014 
					
					
					
						Сообщений: 10
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Спасибо за старания, но живого у меня нет, я пока на денвере все тестирую)  
Но вот что мне непонятно, так это то что когда нет кнопок на странице, то все отрабатывает на отлично. Хотя в консоли все тоже самое с мусором, видимо у меня как то переключения не так обрабатываются, или функция available у датапикера. 
Может массив work_arr не виден в функции available? Как его заглобалить? 
Потому что когда я делаю console.log(work_arr); в функции available у меня в консоли undefined
 
Ух, все нашел багу, вытащил его из всех функций на самый верх.
 
var datas = '.json_encode ($combo_html).';
var keys = Object.keys(datas);
var work_arr;
 
Всем спасибо)  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось TITO, 11.01.2014 в 20:44.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |