Всем доброго времени суток.
Есть обработчик 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;
}
Подскажите хотя бы в какую сторону копать! Уже не знаю что с этим делать....