Jquery загрузить, а затем редактировать загруженный контент - PullRequest
4 голосов
/ 31 июля 2009

Я использую загрузку Jquery, а затем, как только содержимое загружается в div, я хочу изменить некоторые теги на переменные, зависящие от языка.

Моя проблема в том, что мне нужно использовать settimeout, чтобы заставить скрипт ждать достаточно долго, чтобы элементы были готовы к редактированию.

Когда я использую параметр функции обратного вызова, элементы, которые я хочу редактировать, очевидно, не готовы, потому что они не установлены. Я ненавижу использовать settimeout, потому что это ограничивает всех самыми медленными настройками и неизменно некоторые соединения будут даже медленнее, чем это.

Очевидно, что метод обратного вызова просто означает, что метод ajax вернул html, но он не гарантирует, что импортированные элементы действительно готовы в dom.

У кого-нибудь есть идеи?

текущий код

$("#content-basket").load("/BasketPage.htm?time=" + now.getMilliseconds());
...
...
setTimeout("timedbasket();", 500);
...
...
function timedbasket() {
    alert($('#basketlegend'));
    $('#basketlegend').html(basketlabel);
}

Я бы хотел использовать

$("#content-basket").load("/BasketPage.htm?time=" + now.getMilliseconds(), "", timedbasket());

Вот источник basket.htm

<tr>
    <td>
        <div id="basket">
            <fieldset>
                <legend><span id="basketlegend"></span></legend>
                <table id="baskettbl" border="0" class="basket-table">
                    <tbody>
                        <tr class='total'>
                            <td>
                                <span id="empty"></span>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </fieldset>
        </div>
    </td>
</tr>

Ответы [ 2 ]

2 голосов
/ 31 июля 2009

Используйте параметр обратного вызова для загрузки и введите свой код в обратный вызов.

$("#content-basket").load("/BasketPage.htm?time=" + now.getMilliseconds(),null,
    function() {
           ...do stuff here after #content-basket is finished loading...
});

После просмотра jQuery кажется, что ответ вводится до вызова каких-либо обратных вызовов, поэтому DOM следует обновить. Возможно ли, что вы повторно используете объекты jQuery, которые могут ссылаться на элементы DOM, которые ранее были там, но были заменены загрузкой?

0 голосов
/ 31 июля 2009

jQuery.live - это ответ. Привязывайте свои события к элементам DOM таким образом, и это затронет даже новые.

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