Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.09.2012, 05:03
Новичок на форуме
Отправить личное сообщение для Вечный Студент Посмотреть профиль Найти все сообщения от Вечный Студент
 
Регистрация: 28.09.2012
Сообщений: 6

Проблемы с 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;
}


Подскажите хотя бы в какую сторону копать! Уже не знаю что с этим делать....

Последний раз редактировалось Вечный Студент, 28.09.2012 в 05:37.
Ответить с цитированием
  #2 (permalink)  
Старый 28.09.2012, 07:10
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

добавьте на свою страницу DOCTYPE
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 28.09.2012, 18:07
Новичок на форуме
Отправить личное сообщение для Вечный Студент Посмотреть профиль Найти все сообщения от Вечный Студент
 
Регистрация: 28.09.2012
Сообщений: 6

Перепробовал все доктайпы - не помогло...Еще варианты?

Тут выяснилось, что ИЕ 8 ругается на 41-ю строчку. Там то что ему не нравиться, не пойму....

Последний раз редактировалось Вечный Студент, 28.09.2012 в 18:20.
Ответить с цитированием
  #4 (permalink)  
Старый 28.09.2012, 20:09
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

devote,
ИЕ<9 поддерживает onchange?
Ответить с цитированием
  #5 (permalink)  
Старый 28.09.2012, 22:32
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Dim@
ИЕ<9 поддерживает onchange?
должен
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с jqGrid и JSON massacra_panda Библиотеки/Тулкиты/Фреймворки 1 08.10.2012 16:44
json данные не грузятся в windows XP но грузятся в w7 rustamaha Элементы интерфейса 2 28.11.2011 12:35
JSON или JSONP для запросов на другой сервер? Метод GET, для длинных сообщений? Kotakota jQuery 5 23.08.2011 23:12
jQuery. Обработка ошибок и JSON. mma_mma jQuery 3 19.07.2010 12:10
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37