Показать сообщение отдельно
  #1 (permalink)  
Старый 19.03.2010, 15:21
Новичок на форуме
Отправить личное сообщение для shu7 Посмотреть профиль Найти все сообщения от shu7
 
Регистрация: 19.03.2010
Сообщений: 1

AJAX + Firefox некорректное отображение checkbox
Приветствую всех!

В процессе написания кода для создания дерева (каталог) столкнулся с проблемой некорректного отображения статуса чекбокса.

Предистория:
Раскрывающаяся ветка для дерева создается с помощью скрипта на jQuery (с использованием AJAX) (все ОК, работает в: ie, opera, firefox, Chrome)

название дерева
- категория 1
--подкатегория 1
--подкатегория 2
- категория 2
- категория 3

действия:
1. при загрузке страницы отображается первый уровень (категория 1, 2, 3)
2. пользователь раскрывает категорию
3. в появившейся подкатегории выделяет "подкатегория 1"
4. в базе данных сохраняется статус "подкатегории 1" (javascript по клику на чекбоксе)
5. пользователь обновляет страницу (F5)
6. на странице отображается дерево без подкатегорий (аля шаг 1)
7. firefox отображает выделенным элемент (категория 2)

т.е. firefox тикает при обновлении "второй" элемент дерева на странице,
соответственно, если в начале выделить "подкатегорию 2", то после обновления он выделит "категорию 3" (третий чекбокс на странице)

В ie, opera chrome все работает корректно, после обновления страницы некорректные элементы не выделяются

PS: при просмотре кода через firebug, некорректно выделенный чекбокс не имеет флага checked
PSS: если обновлять ctrl+F5 - все отображается корректно, поэтому подозреваю что проблема в кукис либо кэше файрфокса

jquery код создания ветки:
function getSubTree(){
  $('img.tree_plus').live("click", function(){
    var id = $(this).next().attr('value');
    var $res = $(this).parent().parent();
    var path = document.location.pathname;
    var img = $(this).attr('src');
    if (path.indexOf('userpage')>0){
        var page = 'admin';
        var inputtype = 'checkbox';
    } else if (path.indexOf('personal')>0){
        var page = 'personal';
        var inputtype = 'checkbox';
    } else {
        var inputtype = 'radio';
        var page = 'index';
    }
    if (img.indexOf('plus')>0){
        img = img.replace('plus', 'minus');
        $(this).attr('src', img);
        $res.after('<div></div>');
        $.ajax({type: "POST", url: "/admin/get_subtree", data: {id:id, page:page, inputtype:inputtype}, dataType: "text", success: function(msg){
                $res.next().html(msg);
        }});
    } else{
        img = img.replace('minus', 'plus');
        $(this).attr('src', img);
        $res.next().remove()
    };
  });
};


Заранее спасибо всем кто откликнется
Александр
Ответить с цитированием