Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.10.2008, 21:20
V-z-z-HobboT
 
Сообщений: n/a

Почему не работает JS с подгруженными в DOM элементами?
Собственно сабж.

Прописана следующая функция:
Код:
$(document).ready(function(){
    $("a.thumbs").click(function(){
        var largePath=$(this).attr("href");
        $("#largeImg").attr({src:largePath});
        return false;
    });
});
AJAX`ом подгружаю несколько ссылок с картинками ("a.thumbs") и innerHTML`ю в DOM. Но пчему-то не работает указанный код.
В чем проблема?

ЗЫЖ В статичной страничке все, естессно, ок.
Ответить с цитированием
  #2 (permalink)  
Старый 21.10.2008, 21:44
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Есть же раздел для «jQuery», неужели он такой незаметный…

Не работает, потому что Вы добавляете события массиву ссылок с классом «thumbs» в тот момент, когда их ещё нет в документе (т.е. действие в «jQuery» происходит над пустым массивом, другими словами ничего не происходит), так приведённый вами код выполняется по событию «DOMContentLoaded» ($(document).ready(…)), а ссылки, как вы написали, добавляются уже после, через AJAX.
Ответить с цитированием
  #3 (permalink)  
Старый 21.10.2008, 21:51
V-z-z-HobboT
 
Сообщений: n/a

И как же этого избежать? Дело в том, что если я даже подгружаемым ссылкам пропишу href нечно вроде:
<a href="javasсript:alert('та ё-маё!');">...</a>
и это не работает.
Ответить с цитированием
  #4 (permalink)  
Старый 22.10.2008, 06:54
V-z-z-HobboT
 
Сообщений: n/a

Немного поменял, поставил это конструкцию после загрузки элементов "a.thumbs":
Код:
$("a.thumbs").click(function(){
    var largePath=$(this).attr("href");
    $("#largeImg").attr({src:largePath});
    return false;
});
Но все равно не работает. Что самое интересное, если в файрбаге поставить брейкпоинт сюда:
Код:
...
$("a.thumbs").click(function(){
...
а потом продолжить выполнение скрипта - все работает, как надо.
Ответить с цитированием
  #5 (permalink)  
Старый 22.10.2008, 14:53
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,245

естесна работает, так как пока вы щелкните на продолжение скрипта, уже придет асинхронный ответ, и объекты создадутся, и $("a.thumbs") будет не пустым.вам же ясно написали
Сообщение от Octane
Не работает, потому что Вы добавляете события массиву ссылок с классом «thumbs» в тот момент, когда их ещё нет в документе
а при такой задержке, массив уже не пустой.
для решения проблемы советую
function(){
    $("a.thumbs").click(function(){
        var largePath=$(this).attr("href");
        $("#largeImg").attr({src:largePath});
        return false;
    });
}
поместить не в $(document).ready(), а в конец обраьотчика вашего Ajax-запроса, и вызвать там же. тогда должо работать
Ответить с цитированием
  #6 (permalink)  
Старый 30.03.2009, 12:50
Новичок на форуме
Отправить личное сообщение для ostrov Посмотреть профиль Найти все сообщения от ostrov
 
Регистрация: 30.03.2009
Сообщений: 1

Аналогичная ситуация. Поставил click загружаемого элемента в конце (вне области $(document).ready() ), но обработчик не работает, подгруженный элемент имеет length 0 (проверял заменяя добавляя в погружаемій элемент onclick="testFunc()" ).
Ответить с цитированием
  #7 (permalink)  
Старый 30.03.2009, 14:02
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,245

ostrov,
и что же вы ожидаете, поставив код "в конце", вне $(document).ready()?
естественно не работает, ПОТОМУ ЧТО ЭЛЕМЕНТА ЕЩЕ НЕТ!!!!!!!!
и быть не может.
потому что надо вешать обработчики когда элемент уже есть.
если он прописан в коде нормально, то вешать обработчик надо в $(document).ready().Если элемент создается после ответа с сервера, то там же и вешаем ему событие
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите! Почему в Opera js-код работает с ошибкой. В IE все нормально. maxonline Events/DOM/Window 4 21.11.2008 12:39
Почему не работает скрипт? milvic Общие вопросы Javascript 3 03.03.2008 14:12