Проблемы с JSON в IE 7,8
Всем доброго времени суток.
Есть обработчик change в input-e, который формирует объект, а потом конвертирует его в JSON строку и сохраняет в скрытом поле. Во всех браузерах отрабатывает нормально, но как всегда творения мелкомягких отличились. В ИЕ 7,8 выбрасывает ошибку "Объект не поддерживает это свойство или метод". json2.js подключал, проблемы не решил, больше решений гугл не выдал. Заранее прошу прощения за свой быдлокод, я только учусь :-? var orderInfo = {}; $('input#orderObj').val(JSON.stringify(orderInfo)); $('#table-wrap td>input').change(function(){ var summ = $('.sum').val(); var num = $(this).val() ? parseInt($(this).val()): 0; var ordered = JSON.parse($('input#orderObj').val()); var data = getData($(this).parentsUntil('tr').parent()); // получаем массив с содержимым строки и разделом меню data[2].push(num) // проверяем, было ли заказано это блюдо //если да, то меняем его количество //если нет, то добавляем //если количество равно нулю, то вообще удаляем блюдо из заказа ordered = checkOrder(data, ordered); //отображаем заказанные блюда на последней вкладке printOrder(ordered); clicker();// навешиваем обработчики //подсчитываем общую сумму заказа countPrice(ordered); $('input#orderObj').val(JSON.stringify(ordered)); }); function getData(tr) { //получаем id текущей вкладки меню var headerId = $(tr).parentsUntil("div").parent().attr("id"); //находим заголовок раздела меню, соответствующий вкладке $("#lineTabs > li").each(function(index, elem){ if ($(elem).children("a").attr('href').slice(1) == headerId) {header = $(elem).text();} }) var data = [headerId.slice(-1), header,[]]; //делаем выборку данных о блюде из целевой строки data[2].push($(tr).find("span").text().trim()); data[2].push($(tr).children().eq(1).text()) data[2].push($(tr).children().eq(2).text()) return data; } //end of getData() function checkOrder(orderData, order){ headId = "head_" +orderData[0]; if (order[headId] !== undefined){//если уже были заказы из этого раздела var orderedDishes = order[headId][1]; // уже заказанные блюда var newOrderDish = orderData[2];// только что заказанное блюдо var token = true; // если мы найдем блюдо, то он меняется. Да, я быдло... out: for (var i=0; i<orderedDishes.length; ++i){ //проверяем блюдо var dish = orderedDishes[i]; if (newOrderDish[0] == orderedDishes[i][0] ) { // если находим такое блюдо, то проверяем количество заказанных порций token = false; if (!(newOrderDish[3] == dish[3])) { //если количества не совпадают, то проверяем на ноль if (parseInt(newOrderDish[3]) == 0){ //если равно нулю, orderedDishes.splice(i,1); // то удаляем "блюдо" if (order[headId][1].length == 0){delete order[headId];break out;} // если раздел пуст, то мы удаляем и его break out; } else { dish[3] = newOrderDish[3]; // иначе присваиваем новое количество break out; } } } } if(token) order[headId][1].push(newOrderDish); }else { //если заказов из данного раздела не было, то также добавляем его order[headId] = [orderData[1],[orderData[2]]] } return order; }// end of checkedOrder() function printOrder(order){ $("div#ordered>div").children().remove(); $("div#ordered>div").prepend('<ul id="orderedList"></ul>'); for (prop in order){ var dish = order[prop][1]; $("ul#orderedList").append("<li><span></span></li>"); $("ul#orderedList>li:last>span").append(order[prop][0]); $("ul#orderedList > li:last").append("<ul class='hide'></ul>"); for(var i=0; i<dish.length; ++i){ $("ul#orderedList > li:last>ul").append("<li></li>") $("ul#orderedList > li:last>ul>li:last").append(dish[i][0] + " ("+ dish[i][3]+ ")"); } } } //end of printOrder() function countPrice(order){ var price = 0; for (prop in order){ price += countArr(order[prop][1]) } $(".summ").val(price); } function countArr(arr){ var add = 0; for (var i=0; i<arr.length; ++i){ add +=arr[i][3]*parseInt(arr[i][2]); } return add; } Подскажите хотя бы в какую сторону копать! Уже не знаю что с этим делать.... |
добавьте на свою страницу DOCTYPE
|
Перепробовал все доктайпы - не помогло...Еще варианты?
Тут выяснилось, что ИЕ 8 ругается на 41-ю строчку. Там то что ему не нравиться, не пойму.... |
devote,
ИЕ<9 поддерживает onchange? |
Цитата:
|
Часовой пояс GMT +3, время: 21:58. |