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

Тема в разделе "Другие языки", создана пользователем phillip, 9 авг 2009.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    Здравствуйте! Помогите решить проблему, я похоже решение нашел но переиначить не смог под свой лад.
    Вот в этой теме: http://javascript.ru/forum/jquery/4...bytiya-na-ehlementakh-kotorye-sam-sozdal.html
    Суть такова. При загрузке страницы мы видем 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);
                });
    Помогите, пожалуйста! Делаю для своих нужд, в яваскрипте вообще слаб
     
  2. t3mp

    t3mp Создатель

    Регистр.:
    21 янв 2009
    Сообщения:
    13
    Симпатии:
    1
    Попробуйте вместо
    Код:
    $(".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. Возможно скобки неправильно расставил.
     
    phillip нравится это.
  3. omfg

    omfg

    Регистр.:
    4 авг 2009
    Сообщения:
    159
    Симпатии:
    46
    Ну с каждым событием вы переборщили, это будет плохо сказываться на производительности.
    live() после любого изменения dom проходит через всю структуру и вешает событие куда-нужно, поэтому если их будет достаточно много, то могут начаться проблемы с производительностью. Так что вешать нужно лишь на те элементы, которые создаются динамически (например подгружаются аяксом)
     
    phillip нравится это.
  4. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    спасибо! для кликов сделал, а как сделать для события hover? попробовал по аналогии

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

    Не работает :nezn:
     
  5. omfg

    omfg

    Регистр.:
    4 авг 2009
    Сообщения:
    159
    Симпатии:
    46
    С ховер не работает, просто разделите ховер на mouseover и mouseout
     
    phillip нравится это.
  6. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    А есть еще плагин для jquery так и называется live query, им как-нибудь можно сделать? http://docs.jquery.com/Plugins/livequery
    omfg, а как сделать чтобы live вешался только на новые элементы? :bc:
     
  7. omfg

    omfg

    Регистр.:
    4 авг 2009
    Сообщения:
    159
    Симпатии:
    46
    Я просто говорил про то, что вешай лив только на те элементы, которые создаются динамически, для других используй обычные события.

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