jquery. Не видит созданное самим собой

Статус
В этой теме нельзя размещать новые ответы.

phillip

Полезный
Регистрация
4 Сен 2007
Сообщения
411
Реакции
15
Здравствуйте! Помогите решить проблему, я похоже решение нашел но переиначить не смог под свой лад.
Вот в этой теме: Для просмотра ссылки Войди или Зарегистрируйся
Суть такова. При загрузке страницы мы видем item'ы, на которых уже повешаны многие события-
Код:
$(".erase_button").click(function(){
    item  = $(this).parents(".item");
    $.get("reqs.php?erase="+item.attr('id'), function(data){
        if(data=='deleted'){
        $(item).fadeOut('fast');
        }
        });
    });
    $(".item").hover(function() {
        $(this).css('background-color', 'CCF0CC');
    }, function() {
        $(this).css('background-color', 'DDDDDF');
        $(this).find(".answermenu").css('background-color', 'DDDDDF');
        $(this).find(".answermenu").animate({opacity: "hide", left: "450"}, "fast");
    });
    $(".answer_button").click(function(){
        $(this).parents(".item").find(".answermenu").css('background-color', 'CCF0CC');
        $(this).parents(".item").find(".answermenu").animate({opacity: "show", left: "650"}, "slow");
    });

Вот для наглядности хтмл код одного itema
Код:
<div class="item">Содержание бла бла бла<div class="erase_button">Удалить</div><div class="answer_button">Ответить на заказ</div><div class="answermenu\">Меню ответа</div></div>
. И у нас есть кнопка, по нажатию на которую через get идет запрос к файлу который связывается с БД и возвращает точно такой же итем, только с другим содержанием. Дак вот у этого итема уже не работают ктопки удалить, ответить и т.д. То, что jquery сам создал, он не видит, и работать с этим не хочет
Вот функция которая посылает get запрос и добавляет item
Код:
$.get("reqs.php?show=new_zakazes", function(data){
            $(".refr").append(data);
            });

Помогите, пожалуйста! Делаю для своих нужд, в яваскрипте вообще слаб
 
Попробуйте вместо
Код:
$(".erase_button").click(function(){
    item  = $(this).parents(".item");
    $.get("reqs.php?erase="+item.attr('id'), function(data){
        if(data=='deleted'){
        $(item).fadeOut('fast');
        }
        });
    });
написать
Код:
$(".erase_button").live("click",function(){
    item  = $(this).parents(".item");
    $.get("reqs.php?erase="+item.attr('id'), function(data){
        if(data=='deleted'){
        $(item).fadeOut('fast');
        }
        };
});
И так для каждого события.
P.S. Возможно скобки неправильно расставил.
 
Ну с каждым событием вы переборщили, это будет плохо сказываться на производительности.
live() после любого изменения dom проходит через всю структуру и вешает событие куда-нужно, поэтому если их будет достаточно много, то могут начаться проблемы с производительностью. Так что вешать нужно лишь на те элементы, которые создаются динамически (например подгружаются аяксом)
 
спасибо! для кликов сделал, а как сделать для события hover? попробовал по аналогии

$(".erase_button").live("click",function(){
});
заменил на
$(".erase_button").live("hover",function(){
});

Не работает :nezn:
 
С ховер не работает, просто разделите ховер на mouseover и mouseout
 
А есть еще плагин для jquery так и называется live query, им как-нибудь можно сделать? Для просмотра ссылки Войди или Зарегистрируйся
omfg, а как сделать чтобы live вешался только на новые элементы? :bc:
 
Я просто говорил про то, что вешай лив только на те элементы, которые создаются динамически, для других используй обычные события.

Плагин live jquery был выпущен до версии 1.3, после релиза этой версии его включили в основной код, так что это одно и тоже :)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху