Фильтр "мусора" в массиве
Всем привет. Есть одна не понятка с 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,
где 18 строка скрипта? |
Массив выводиться весь, это я недоглядел, но в конце все равно мусор. Я не нашел в редакторе местном спойлера, так что простите за простыню)
Здесь весь код <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,
а зачем слеши в 28, 57 и 69 строках? |
Цитата:
|
Отредактировал.
Прошу заметить, что в случае когда на странице кнопок нет, и массив формируется в виде 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, вашу ошибку воспроизвести неудалось ))) нужен живой макет
|
Спасибо за старания, но живого у меня нет, я пока на денвере все тестирую)
Но вот что мне непонятно, так это то что когда нет кнопок на странице, то все отрабатывает на отлично. Хотя в консоли все тоже самое с мусором, видимо у меня как то переключения не так обрабатываются, или функция available у датапикера. Может массив work_arr не виден в функции available? Как его заглобалить? Потому что когда я делаю console.log(work_arr); в функции available у меня в консоли undefined Ух, все нашел багу, вытащил его из всех функций на самый верх. var datas = '.json_encode ($combo_html).'; var keys = Object.keys(datas); var work_arr; Всем спасибо) |
Часовой пояс GMT +3, время: 03:44. |