За последние 24 часа нас посетили 23552 программиста и 1540 роботов. Сейчас ищут 1006 программистов ...

JQuery, live()

Тема в разделе "JavaScript и AJAX", создана пользователем dots_rei, 5 окт 2010.

  1. dots_rei

    dots_rei Активный пользователь

    С нами с:
    7 авг 2009
    Сообщения:
    193
    Симпатии:
    0
    Доброго времени суток!

    Получаю ссылки в блоке с помощью ajax. Для добавления события использую метод live:
    [js] $("a.a_contact").live("click",function(event){
    некий код
    });
    [/js]

    При нажатии на ссылку в функцию-обработчик должны передаваться некие параметры (заранее не известные).
    Ссылок в блоке может быть сколько угодно.
    До использования метода live ссылка выглядела так:
    HTML:
    1. <a href="#" class="a_contact" onClick="f_contact(1,2,3);">ссылка 1</a>
    Как передавать заранее не известные параметры в функцию-обработчик при использовании live()?

    Спасибо за помощь
     
  2. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    я бы добавил свой атрибут в ссылку, а в live выдерал из этого атрибута переменныйе, что то типа <a myval="1" ></a>
    [js]$("a.a_contact").live("click",function(event){
    this.atr("myval");
    });[/js]
    и отправлял бы в другую функцию
    но наверное можно проще
     
  3. ShamahN

    ShamahN Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Я вообще live`ом не пользуюсь. Добавляя новую ссылку делаешь:
    [js]var a = $("<a href='#'>тыкни</a>").click(function(){alert(1111);});
    $(идентификатор).append(a);
    [/js]
    как-то так
     
  4. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    1. Зачем использовать live?
    2. Событие "клик" и код, который привязан к этому событию - разные вещи.

    Вынеси просто-напросто внешнюю функцию, как сделано выше. Никаких обработчиков вешать НЕ НАДО, если у тебя и так прописан код для атрибута onclick.
     
  5. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    dots_rei как правило идет привязка к ID эелемента.
    Т.е. к примеру

    Код (Text):
    1. <a href="#" class="js-clickable" id="some_1_2_3"></a>
    2. $("js-clickable").live("click", function() {
    3.   var str = $(this).attr('id');
    4.   var data = str.split(/_/);
    5. });
    Можно и свой атрибут, но некрасиво и невалидно. Еще можно посмотреть на .data() или просто где-то в массиве хранить соответствие ID - данные.

    Кстати, live нужно использовать только если объект, на котором нужно словить событие, генерится жаваскриптом ну или вставляется аяксом. Если это исходный html - то достаточно bind.
     
  6. dots_rei

    dots_rei Активный пользователь

    С нами с:
    7 авг 2009
    Сообщения:
    193
    Симпатии:
    0
    у меня при нажатии на ссылку отправляется запрос на сервер, с учетом переданных параметров формируется блок для ui dialog и вызывается dialog.
    [js]
    $.post("/lib/scripts/c_contact.php",{"c1":c1,"c2":c2,"c3":c3},
    function(data)
    {
    $("#div_dialog_contact").html(data);
    $('#div_dialog_contact').dialog('open');
    });
    [/js]
    Dialog отправляет данные на сервер, и ссылки изменяются.
    Соответственно, после обновления данных dialog нужно снова инициализировать. Вариант, который сразу пришел в голову - инициализировать dialog непосредственно после нажатия на ссылку. Но в таком случае для каждой ссылки придется каждый раз проводить инициализацию (даже если ссылки не менялись).
    Искала вариант, который позволит инициализировать dialog один раз после изменения ссылок. Поэтому думала использовать live(),
    С учетом советов переписала код без использования live(), работает. Недочет с многоразовой инициализацией пока остается.
     
  7. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    В вашем случае (обработка событий на изменяющемся контенте) _нужно_ использовать live, зачем ломали.