JQuery делегат, как вызвать при загрузке контента? - PullRequest
0 голосов
/ 16 декабря 2011

Мне нужно настроить HTML через jQuery, когда страница отрисовывается. Например, у меня может быть это:

<ol>
    <li>
        <div class="theDiv"></div>
        <a class="theLink"...>...</a>
    <li>
<ol>

Иногда мне нужно скрыть div. Иногда мне нужно применить событие click к тегу привязки. Так что я могу иметь это:

$('li').hide();
$('a').click(function(){...});

Это прекрасно работает.

Однако сейчас мы загружаем дополнительные LI в этот список. К сожалению, мы не делаем это с jQuery. Я мог бы обернуть вышеупомянутое в функцию, которая могла бы быть вызвана после загрузки ajax, чтобы перерисовать все. Но есть ли лучший способ?

Я думал, что live() будет решением, но я вижу, что delegate() теперь предпочтительнее с помощью документации.

В любом случае оба варианта позволяют связывать события (щелчок, зависание и т. Д.), А не просто повторную визуализацию после добавления нового HTML в DOM.

Есть ли способ сделать это через delegate()? Есть ли более правильный способ справиться с этим?

UPDATE:

Возможно, гораздо более простой способ задать это: чтобы JS воздействовал на DOM после обновления AJAX, нужно ли запускать его с помощью самого вызова AJAX (обычно с помощью функции обратного вызова), или есть способ jQuery для «следить» за обновлениями DOM и запускать соответственно?

Ответы [ 3 ]

0 голосов
/ 16 декабря 2011

Поместите код, который вы хотите выполнить, в обратный вызов success вашего AJAX-вызова. Удостоверьтесь, что вы запускаете свой код только для новых элементов, если только код ничего не сломает, если он выполняется на одном и том же элементе более одного раза.

0 голосов
/ 16 декабря 2011

Решение состоит в том, чтобы создать функцию javascript, которая использует jQuery и вызывается из любого имеющегося у вас javascript, который выполняет ajax.

Примечание. После прочтения он выглядит в режиме реального времени () и работает только с такими событиями, как щелчок и зависание.

function updateMyStuff() {
    $('li').hide();
    $('a').click(function(){...});
}

...

function myCrazyNonJqueryAjaxWhy?() {
    updateMyStuff();
}
0 голосов
/ 16 декабря 2011

Я думаю, что последним вызовом jquery API для этого является jQuery.on 2-й пример на странице документации, кажется, подходит именно вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...