@NarkoMan01

Почему jquery возвращает undefined?

делаю такой запрос, получаю undefined:

$('#employee_avatar_button').click(function(){
     $('#employee_avatar_ul').one('DOMSubtreeModified',function(){
            const input = $('#employee_avatar_ul li::last-child')
            // Получаю undefined
            console.log(input.find('input').attr('file_id'))})


Если попробую такой же запрос ввести в браузере, то все работает. например:
$('#employee_avatar_ul li::last-child input').attr('file_id')
// some id
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Событие DOMSubtreeModified морально устарело и не поддерживается более браузерами.
Если вам нужна реакция на изменение страницы, то вы должны использовать наблюдателей.

Делается это примерно так:
// При клике на кнокпу выполняем функцию:

$('#employee_avatar_button').click(function(){
	
	// Создаем наблюдателя, переданная функция будет
	// выполнятся всякий раз при изменении страницы:

	var observer = new MutationObserver(function() {
		
		// Ищем нужный нам элемент:
		var el = $('#employee_avatar_ul li::last-child');
		
		// Если элемент найден:
		
		if (el.length > 0) {
			
			// Откл. наблюдателя:
			observer.disconnect();
			
			// Выводим уведомления:
			
			console.log('Найден элемент:');
			console.dir(el[0]);
			
			console.log('Его атрибут file_id: ' + el.attr('file_id'));
			
		}
		
		// Если элемента еще нет:
		
		else {
			
			// Выводим соотвествующее уведомление:
			console.log('Обнаружено изменение содержимого тега <body></body> - однако элемент, который мы ждем, пока еще отсуствует на странице.');
			
		}
		
	});

	// Прикрепляем наблюдатель к body:

	observer.observe(document.body, {
		characterData: true,
		attributes: true,
		childList: true,
		subtree: true
	});

});

Почитать подробнее можно здесь: https://learn.javascript.ru/mutation-observer
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы