jQuery / JavaScript: setinterval Проверьте, существует ли элемент DOM?
-
25-09-2019 - |
Вопрос
чек var; Функция Showloader () {$ ('# mc_signup_form'). Prepend («Загрузка ...»); check_init (); }
function check_init() {
check = setInterval('check_trigger()', 300);
}
function check_clear() {
clearInterval(check);
}
function check_trigger() {
if ( $('.mc_error_msg').length == 0 || $('.mc_success_msg').length == 0 ) {
$('#mc_signup_form .loading').remove();
check_clear();
}
}
Интересно, почему мой браузер продолжает говорить мне, что check_trigger () не существует? Я инициирую Setinterval внутри моей функции ShowLoyer (). Он должен вызвать check_trigger. Когда одна из двух Divs (.mc_error_msg или .mc_success_msg) существует, я хочу очистить интервал.
Что я делаю неправильно?
Решение
Я нахожу проходящие строки к setTimeout
а также setInterval
Просто приводит к проблемам :)
Пытаться:
setInterval(check_trigger, 300);
Другие советы
Это должно быть Check_trigger только удаление за пределами одного или двойной цитаты ...
Также используйте Settimeout вместо SetInterval, чтобы вы могли избавиться от глобальной переменной
Избегайте двойной оценки
Поместив эту функцию в quotes
, Ecma- / JavaScript будет eval
Этот код, который просто невероятно медленный. Так что всегда используйте function reference
сочетание setTimeout
/ setInterval
:
setInterval(function(){
check_trigger();
}, 300);
или напрямую
setInterval(check_trigger, 300);
Если вы извлекаете элементы, рассматриваемые вами где-нибудь, это может быть интересный подход к крюк то jQuery .remove()
или .detach()
Способ (если вы называете их, чтобы удалить элемент).
Это может выглядеть как:
var hookRemove = $.fn.remove;
$.fn.remove = function(){
if(this.id === 'something'){
// hoorray! we found it
}
hookRemove.apply(this, arguments);
};
Помните, что вы имеете дело с jQuery object
внутри крючка. Так на самом деле this
также может быть wrapped set
элементов. Поэтому звонок
this.each(function(){
});
Внутри крючка должно быть больше сохранения для проверки. Таким образом у вас есть exact
Знание, когда объект удален без intervall timer
.
Объединение различных предложений вот как упрощенная версия, которая должна работать независимо от объема, в которой она определяется.
function showLoader () {
$('#mc_signup_form').prepend('<span class="loading"> loading …</span>');
setTimeout (function check_trigger () {
if ( $('.mc_error_msg').length == 0 || $('.mc_success_msg').length == 0 ) {
$('#mc_signup_form .loading').remove();
} else {
setTimeout (check_trigger, 300);
}
}, 300);
}