Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.05.2017, 16:04
Аспирант
Отправить личное сообщение для rodiony4 Посмотреть профиль Найти все сообщения от rodiony4
 
Регистрация: 26.10.2015
Сообщений: 97

Проверка элемента на существование в цикле
Здравствуйте
так я проверяю существование элемента на странице:
<script type="text/javascript">
$(".zzz").live('click', function(){
	if($(".ymaps-2-1-47-button__text").length>0) {
		alert('есть');
	
	};
});
</script>

<div class="zzz">проверка на существование</div>

но проверяемый элемент загружается динамически, через какое-то неопределенное время
помогите пожалуйста, сделать проверку элемента в цикле - проверять до тех пор, пока проверяемый элемент (.ymaps-2-1-47-button__text) не загрузится на страницу, после чего показать алерт
Ответить с цитированием
  #2 (permalink)  
Старый 31.05.2017, 16:09
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Либо отложить проверку до загрузки всех элементов,
либо если вам надо вызывать функцию после загрузки элемента
используйте такую конструкцию
$(элем).ready(function() {

если элемент грузится аяксом используйте колбек!
А то что вы хотите сделать это плохо!

Последний раз редактировалось j0hnik, 31.05.2017 в 16:16.
Ответить с цитированием
  #3 (permalink)  
Старый 31.05.2017, 16:13
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,201

Сообщение от rodiony4
сделать проверку элемента в цикле - проверять до тех пор, пока проверяемый элемент (.ymaps-2-1-47-button__text) не загрузится на страницу
Это нужно делать не в цикле...
Это делается с использованием setTimeout()
Ответить с цитированием
  #4 (permalink)  
Старый 31.05.2017, 16:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ksa
Это делается с использованием setTimeout()
Лучше для этого использовать либо MutationObserver, либо для стареньких DOMNodeInserted.
Ответить с цитированием
  #5 (permalink)  
Старый 31.05.2017, 16:37
Аспирант
Отправить личное сообщение для rodiony4 Посмотреть профиль Найти все сообщения от rodiony4
 
Регистрация: 26.10.2015
Сообщений: 97

j0hnik, ksa, laimas, подробнее - по клику на ссылку, на страницу загружается яндекс карта. Когда карта полностью загрузится, загрузится и элемент (кнопка на карте) с классом .ymaps-2-1-47-button__text Вот этот момент нужно отследить и показать алерт после загрузки .ymaps-2-1-47-button__text
Как в этом случае использовать setTimeout() я не понял
Ответить с цитированием
  #6 (permalink)  
Старый 31.05.2017, 16:50
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

rodiony4,

document.addEventListener("DOMNodeInserted", function (e) {
	if ( e.target.classList.contains("ymaps-2-1-47-button__text") ) {
		// ваш код
	}
});
Ответить с цитированием
  #7 (permalink)  
Старый 31.05.2017, 17:19
Аспирант
Отправить личное сообщение для rodiony4 Посмотреть профиль Найти все сообщения от rodiony4
 
Регистрация: 26.10.2015
Сообщений: 97

Diphenyl Oxalate, я наверное сделал что-то не так, ваша функция не выполняется. посмотрите? http://www.specglass.ru/Untitled-2.html
Ответить с цитированием
  #8 (permalink)  
Старый 31.05.2017, 18:49
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

rodiony4,
мой недосмотр - не учёл, что элемент с нужным классом может быть вложенным.

document.addEventListener("DOMNodeInserted", function (e) {
	if ( e.target.nodeType != 1 ) return;
	if ( e.target.classList.contains("ymaps-2-1-47-button__text") || e.target.getElementsByClassName("ymaps-2-1-47-button__text").length ) {
		alert("Ура!");
	}
});
Ответить с цитированием
  #9 (permalink)  
Старый 31.05.2017, 20:51
Аспирант
Отправить личное сообщение для rodiony4 Посмотреть профиль Найти все сообщения от rodiony4
 
Регистрация: 26.10.2015
Сообщений: 97

Diphenyl Oxalate, спасибо, вместо алерта добавляю уже на загруженную карту див:
document.addEventListener("DOMNodeInserted", function (e) {
	if ( e.target.nodeType != 1 ) return;
	if ( e.target.classList.contains("ymaps-2-1-47-button__text") || e.target.getElementsByClassName("ymaps-2-1-47-button__text").length ) {
		$(".cap_site_map").append("<div class='close_map_x'>Закрыть</div>");
	}
});

все выполняется, но только один раз (проверял в опера, мозила, хром, ie)
например, кликаю по кнопке map (.cap_contact_1) - загружается карта, после того как карта загрузилась - добавляется мой див Закрыть карту (.close_map_x)
кликаю на див .close_map_x - карта закрывается, все ОК
но в дальнейшем при клике по кнопке map (.cap_contact_1) - файербаг показывает TypeError: can't access dead object

вот пример http://www.specglass.ru/Untitled-2.html
Ответить с цитированием
  #10 (permalink)  
Старый 31.05.2017, 23:04
Аспирант
Отправить личное сообщение для rodiony4 Посмотреть профиль Найти все сообщения от rodiony4
 
Регистрация: 26.10.2015
Сообщений: 97

Diphenyl Oxalate, ваш код js выполняется, это у меня небольшой косяк, в функции, где кнопка закрытия карты:
$(".close_map_x").live('click', function(){
	$(".cap_site_map").fadeOut(600);
});

если заменить
$(".cap_site_map").fadeOut(600);

на
$(".cap_site_map").html("");

то все работает корректно
буду благодарен, если объясните, почему возникала ошибка с fadeOut
Вам большое спасибо за помощь!
обновленный пример http://www.specglass.ru/Untitled-2.html
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на существование элемента в реальном времени js dkmrus Общие вопросы Javascript 7 03.05.2016 22:12
Проверка выбранного типа элемента Alex_dark74 Общие вопросы Javascript 3 20.06.2015 18:53
Проверка HTML элемента на существование MCTrane Общие вопросы Javascript 10 26.02.2014 20:51
проверка на наличие элемента czp Events/DOM/Window 2 30.08.2012 09:13
проверка элемента на существование Дмитрий С. Общие вопросы Javascript 2 13.11.2008 12:05