2016-02-05 1 views
1

Есть ли способ, которым я могу запустить функцию один раз после того, как определенный элемент был найден?Как запустить функцию после того, как элемент был найден с помощью JQuery/Javascript

Я попытался это:

setInterval(function() { 
    if ($('.imagewrapper').length) { 
      self.carousel(); 
    }  
}, 1000) 

Таким образом, он проверяет мою страницу продолжительную если .imagewrapper элемент exisit, и если да, то он должен выполнить функцию self.carousel(). Проблема в том, что таким образом, как только элемент существует, он непрерывно выполняет эту функцию. Есть ли способ?

ps: setInterval -исход должен быть там.

+0

'setInterval' должен быть там, и' callback' не должен выполняться после интервала? – Rayon

+0

@RayonDabre: ваш синтаксис кода правильный, что '$ (document.ready' ?? и OP хочет запускать функцию снова и снова по истечении заданного интервала –

+0

@YoYo, нет, это не так! Мой комментарий был о _run функции раз после того, как найден какой-либо конкретный элемент_ – Rayon

ответ

3

Try:

(function delay() { 
    if ($('.imagewrapper').length) { 
     self.carousel(); 
    } else { 
     setTimeout(delay, 1000); 
    } 
})(); 

или если вам нужно setInterval:

var interval = setInterval(function() { 
    if ($('.imagewrapper').length) { 
     self.carousel(); 
     clearInterval(interval); 
    } 
}, 1000); 
1

Это легко:

// set ran to false when you load the page 
ran = false; 
setInterval(function() { 
    // only do your stuff when you haven't do yet (ran==false) 
    if (!ran && $('.imagewrapper').length) { 
    self.carousel(); 
    // when you did it for the 1st time set ran to true, so next time you don't enter the if. 
    ran = true; 
} }, 1000) 

// but even better to stop the timer after you entered the if for the 1st time: 
timer = setInterval(function() { 
    // only do your stuff when you haven't do yet (ran==false) 
    if ($('.imagewrapper').length) { 
    self.carousel(); 
    // when you did it for the 1st time delete the timer 
    clearInterval(timer); 
} }, 1000) 
+0

Вы должны уничтожить интервал с помощью 'clearInterval'. –

+0

не могли бы вы объяснить свой код и о' self.carousel(); ' –

+0

Я добавил комментарии. Карусель приходит из вашего кода в вопросе, вы должны лучше знать, что это такое – Gavriel

Смежные вопросы