Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Селекторы\функции для динамически созданных объектов (https://javascript.ru/forum/events/64125-selektory%5Cfunkcii-dlya-dinamicheski-sozdannykh-obektov.html)

NeVirus 21.07.2016 11:07

Селекторы\функции для динамически созданных объектов
 
Добрый день,

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

В общем кейс такой - есть 2 js скрипта...

Первый после прогрузки страницы создает несколько объектов в DOM - менюшки навигации, футер и все в таком духе. Причем создает просто вставляя в нужный DIV html код из заранее отформатированного текстового файла. Такая вот небольшая кустарная шаблонизация...

Второй шарится по БД, кукисам, локалстореджу и скрывает\показывает некоторые элементы DOM в зависимости от полученной инфы (роли пользователя и тому подобного).

Собственно загвоздка со вторым - он просто никак не видит созданные первым объекты. Мне не нужно навешивать на них обработчики клика и т.д, все должно сработать само после окончания загрузки страницы. Ничего особенно страшного - просто скрыть\показать, выделить цветом и все в таком духе...

Может есть подходящие функции или например заковырестые селекторы :) ?

Кто нибудь наверняка решал же похожую задачку?

P.S. забыл упомянуть -еще подключен JQuery к проекту и сам он на Bootstrap-e.

Decode 21.07.2016 11:14

Про делегирование в учебнике прочитай.

NeVirus 21.07.2016 11:39

Цитата:

Сообщение от Decode (Сообщение 422875)
Про делегирование в учебнике прочитай.

Просматривал несколько раз. Там все что касается навешивания обработчиков - мне нужно не это.

Или Вы хотели этим сказать что я неправильно создаю элементы, загоняя напрямую код в HTML, а не пользуясь функциями добавления объектов?

laimas 21.07.2016 13:06

Цитата:

Сообщение от NeVirus
Там все что касается навешивания обработчиков - мне нужно не это.

А чего вам нужно?

NeVirus 21.07.2016 13:41

Цитата:

Сообщение от laimas (Сообщение 422884)
А чего вам нужно?

Легкий доступ к атрибутам созданных объектов.

А-ля

$('#main_div').html('<div id="new_div"></div>');

$('#new_div').css('display:none;');


Временно решил подтягиванием "jquery.livequery". Но на каждый чих тащить доп. библиотеки это не айс так что вопрос открыт.

рони 21.07.2016 13:52

NeVirus,
задача описана так что вам невозможно подсказать.

laimas 21.07.2016 13:57

:) прочел как нужно.

Dmytro 23.07.2016 15:31

Цитата:

Сообщение от NeVirus (Сообщение 422879)
Просматривал несколько раз. Там все что касается навешивания обработчиков - мне нужно не это.

Поддерживаю вопрос. Хочу работать с динамическими элементами, но не понимаю какое событие можно использовать для делегирования. От пользователя не жду никаких действий.
Подскажите пожалуйста.

рони 23.07.2016 15:40

Dmytro,
где код?

Dmytro 24.07.2016 12:03

Цитата:

Сообщение от рони (Сообщение 423164)
где код?

Код переписывал несколько раз. Использовал примеры из соседних тем. Ничего не получается, как я понимаю, потому что во время выполнения скрипта нужные элементы еще не существуют.

// первое - вижу что окно не содержит элементы которые мне нужны
// нужные элементы (результат поискового запроса) загружается позже
window.onload = addOurLink();

function addOurLink() {
alert ('Окно готово');
var links = document.getElementsByClassName(" item item-border");
var count = links.length;
for(var i = 0; i < count; ++i) {
alert('проходим элемент' + i);
}
};


//второе - взят где-то обработчик события но он у меня не срабатывает
$(document).ajaxComplete(function() {
alert("ALL current AJAX calls have completed");
});


//третье - код для делегирования, который взял в соседней теме
//хотел проверить, что обработка множества событий
//позволит обращаться к элементам, которые загружаются динамически
//выдает ошибку - "parentElem is not defined"
//для строки "parentElem.addEventListener('click', modify);"

function hasClass(elem, cls) {
// ...
return true;
}
function modify() {
var event = e || window.event;
var target = event.target || event.srcElement;
if (hasClass(target, ' item item-border')) {
addModEvent();
}
if (target.className == ' item item-border') {
addModEvent();
}
}
function addModEvent() {
parentElem.addEventListener('click', modify);
}
addModEvent();


Не судите строго за незнание. Спасибо за помощь.
P.S. - как правильно вставлять код в сообщение?


Часовой пояс GMT +3, время: 17:38.