Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.09.2017, 11:49
Профессор
Отправить личное сообщение для DDim1000 Посмотреть профиль Найти все сообщения от DDim1000
 
Регистрация: 20.10.2016
Сообщений: 223

Как узнать о появлении элемента на страницы
Здравствуйте!
Подскажите пожалуйста, как узнать о том, что на страницы появился, например, div c определенным id?
Вот так не работает:

$( "$d" ).on({click: function() {
       alert('Я здесь))');
        }
        });
Ответить с цитированием
  #2 (permalink)  
Старый 13.09.2017, 11:53
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

У этого дива наверное есть событие, вот на него и надо обратить внимание.
Рони, недавно постил вот такой способ https://developer.mozilla.org/ru/doc...tationObserver
Ответить с цитированием
  #3 (permalink)  
Старый 13.09.2017, 12:46
Профессор
Отправить личное сообщение для DDim1000 Посмотреть профиль Найти все сообщения от DDim1000
 
Регистрация: 20.10.2016
Сообщений: 223

Этот код при любом изменении на страницы должен срабатывать, или нет?
var observer = new MutationObserver(function (mutations) {
	  alert('Я здесь))');
   });
Ответить с цитированием
  #4 (permalink)  
Старый 13.09.2017, 13:35
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

Сообщение от DDim1000
Этот код при любом изменении на страницы должен срабатывать, или нет?
В описании конструктора все написано.
Сообщение от developer.mozilla.org
Параметры
callback
Вызывается при каждом изменении DOM-элемента. Observer вызывает данную функцию с двумя аргументами. Первым аргументом является массив объектов MutationRecord, Вторым аргументом является экземпляр MutationObserver.
Upd. Там даже пример использования есть. Если оставить ваш код как есть, то ни одного алерта вызвано не будет, так как ваш экземпляр не подписан ни на один DOM-элемент.

Последний раз редактировалось Nexus, 13.09.2017 в 13:39.
Ответить с цитированием
  #5 (permalink)  
Старый 13.09.2017, 14:01
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

DDim1000,
По идее, надо подписывать на body - тогда все изменения проявятся
Ответить с цитированием
  #6 (permalink)  
Старый 13.09.2017, 14:44
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Dilettante_Pro Посмотреть сообщение
DDim1000,
По идее, надо подписывать на body - тогда все изменения проявятся
или если мы знаем что элемент должен появится в определенном блоке, можно повесить на него.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script>
var observer = new MutationObserver(function(mutations) {
	if(document.querySelector("#id")){
    alert('Я здесь))');
    observer.disconnect();
  }
});
observer.observe(document.body, {childList: true});
// добавить в body нужный элемент через 3 сек.
setTimeout(()=>document.body.insertAdjacentHTML('beforeend', '<div id="id">Hello</div>'), 3000);
	</script>	
</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 14.09.2017, 20:36
Профессор
Отправить личное сообщение для DDim1000 Посмотреть профиль Найти все сообщения от DDim1000
 
Регистрация: 20.10.2016
Сообщений: 223

Спасибо!
Ответить с цитированием
  #8 (permalink)  
Старый 15.09.2017, 14:19
Профессор
Отправить личное сообщение для DDim1000 Посмотреть профиль Найти все сообщения от DDim1000
 
Регистрация: 20.10.2016
Сообщений: 223

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

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script>
var observer = new MutationObserver(function(mutations) {
	if(document.querySelector("#id")){
    alert('Я здесь))');
    observer.disconnect();
  }
});
observer.observe(document.body, {childList: true});
// добавить в body нужный элемент через 3 сек.
setTimeout(()=>document.body.insertAdjacentHTML('beforeend', '<div id="id">Hello</div>'), 3000);
	</script>	
</body>
</html>
Я не знаю в чем прикол, но, если label создаться с другим текстом, то код не срабатывает.
Вот смотрите, если jquery.validate создает вот такой код:
<label id="reg_phone-error" class="error" for="reg_phone" style="display: inline;">Укажите номер телефона!</label>

Или вот такой код:
<label id="reg_phone-error" class="error" for="reg_phone" style="display: inline;">Неверный формат номера телефона!</label>

То, все отлично работает!
Но, когда генерируется такой же код, только с другим текстом, ни какой реакции нет!
<label id="reg_phone-error" class="error" for="reg_phone" style="display: inline;">Пользователь с таким номером уже <br> зарегистрирован!</label>
Ответить с цитированием
  #9 (permalink)  
Старый 15.09.2017, 14:52
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

не нужно создавать два элемента с одинаковым ID отсюда проблемы.
observer.disconnect(); // снимает наблюдение если вам нужно наблюдать дальше, уберите эту строчку

Последний раз редактировалось j0hnik, 15.09.2017 в 14:56.
Ответить с цитированием
  #10 (permalink)  
Старый 15.09.2017, 14:57
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Так работает
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script>
var observer = new MutationObserver(function(mutations) {
	if(document.querySelector("#reg_phone-error")){
    alert('Я здесь))');
    observer.disconnect();
  }
});
observer.observe(document.body, {childList: true});
// добавить в body нужный элемент через 3 сек.
setTimeout(()=>document.body.insertAdjacentHTML('beforeend', '<label id="reg_phone-error" class="error" for="reg_phone" style="display: inline;">Неверный формат номера телефона!</label>'), 3000);
	</script>	
</body>
</html>

И так работает
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<script>
var observer = new MutationObserver(function(mutations) {
	if(document.querySelector("#reg_phone-error")){
    alert('Я здесь))');
    observer.disconnect();
  }
});
observer.observe(document.body, {childList: true});
// добавить в body нужный элемент через 3 сек.
setTimeout(()=>document.body.insertAdjacentHTML('beforeend', '<label id="reg_phone-error" class="error" for="reg_phone" style="display: inline;">Пользователь с таким номером уже <br> зарегистрирован!</label>'), 3000);
	</script>	
</body>
</html>

Или вы создаете ЕЩЕ один лейбл?
Тогда j0hnik прав
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как узнать размер в пикселях элемента созданного элемента span Faab Общие вопросы Javascript 2 09.11.2013 16:46
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как то можно узнать ID HTML элемента вызвавшего JavaScript функцию? Opusel Events/DOM/Window 1 18.12.2011 18:36
Как узнать какой скрипт вызывается при клике по эленету (если это прямо не прописано) Dmitriy Komar Events/DOM/Window 4 08.12.2011 17:21
Как узнать width элемента в ie? trikadin Internet Explorer 13 07.11.2011 22:12