Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.06.2013, 21:18
Кандидат Javascript-наук
Отправить личное сообщение для koeshiro Посмотреть профиль Найти все сообщения от koeshiro
 
Регистрация: 05.12.2012
Сообщений: 125

Переполнен стек. Как избежать?
Здравствуйте. Сделал вот такой скрипт. Дабы определять какие теги\элементы на странице уже обработаны браузером.
loadDed=0; 
y=0; 
function load(x){ 
z=y+x;
   if(document.getElementsByTagName("body")[z]){//Проверяем "готов" ли нужный нам элемент. браузер именно тут пишет что стек переполнен.
    loadDed+10;//Прибавляем 10 дабы отследить сколько процентов уже обработано браузером. 
    alert(loadDed);
   } 
   if(loadDed!=100){ 
    setTimeout(load(x),100);//Делаем цикл дабы функция повторялась пока не погрузится страница.   
   } 
} 
load(1)
Но почему-то переполняется стек. Хотя по сути цикл не должен быть бесконечный. Объясните что я не так сделал .-.
Ответить с цитированием
  #2 (permalink)  
Старый 02.06.2013, 21:37
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

Это бесконечная рекурсия. В 10-й строчке функция load вызывает себя снова и снова.
Ответить с цитированием
  #3 (permalink)  
Старый 02.06.2013, 21:43
Профессор
Отправить личное сообщение для mta88 Посмотреть профиль Найти все сообщения от mta88
 
Регистрация: 16.05.2013
Сообщений: 229

document.getElementsByTagName("body") в любом случае дает коллекцию единичной длины
так что функция все-равно не будет работать
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2013, 21:56
Кандидат Javascript-наук
Отправить личное сообщение для koeshiro Посмотреть профиль Найти все сообщения от koeshiro
 
Регистрация: 05.12.2012
Сообщений: 125

mta88,
то есть разные элементы так не вызвать?
Ответить с цитированием
  #5 (permalink)  
Старый 02.06.2013, 22:05
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

Вообще мозговзрыв!)
Сообщение от koeshiro
Прибавляем 10 дабы отследить сколько процентов уже обработано браузером.
Опустим тот момент, что значение loadDed всегда будет равно нулю. Мне вот интересно, в чем логика?! Прибавляя десять, ты хочешь узнать "сколько процентов уже обработано браузером" чего?
Ответить с цитированием
  #6 (permalink)  
Старый 03.06.2013, 06:23
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Сообщение от koeshiro
то есть разные элементы так не вызвать?
document.getElementsByTagName('*')


И вообще, если Вы хотите сделать полосу загрузки страницы, то ловите лучше onload изображений.

Можно вот так попробовать, но я не проверял.
<div style="width:100px; background:#9F9; border:1px solid #222">
   <div style="width:1px; height:10px; background:red" id="loading"></div>
</div>

function loadComplete()
{
    loading += 100/imgs.length;
    document.getElementById('loading').style.width = loading+'px';
}

var imgs = document.getElementsByTagName('img'), loading = 0;
for(i=0; i<imgs.length; i++) imgs[i].onload = loadComplete;

Последний раз редактировалось ruslan_mart, 03.06.2013 в 07:32.
Ответить с цитированием
  #7 (permalink)  
Старый 03.06.2013, 08:25
Кандидат Javascript-наук
Отправить личное сообщение для koeshiro Посмотреть профиль Найти все сообщения от koeshiro
 
Регистрация: 05.12.2012
Сообщений: 125

Ruslan_xDD,
честно хотел сделать что-то в этом духе, но ко всем элементам в body
Ответить с цитированием
  #8 (permalink)  
Старый 03.06.2013, 08:41
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

koeshiro, а что там загружается то? По моему все элементы кроме img загружаются сразу же, так что отлавливать их нечего, ибо загружаются они почти мгновенно.
Ответить с цитированием
  #9 (permalink)  
Старый 03.06.2013, 09:14
Кандидат Javascript-наук
Отправить личное сообщение для koeshiro Посмотреть профиль Найти все сообщения от koeshiro
 
Регистрация: 05.12.2012
Сообщений: 125

Ruslan_xDD,
все остальные просто за компанию. Для точности . .
Но это ещё нужно будет делать. И делать более обдуманно чем до этого.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как писать код который легко поддерживать, расширять, читать. Policeman Общие вопросы Javascript 3 24.03.2012 05:40
Как при быстром многократном клике по кнопке обрабатывать только первый клик battrack jQuery 3 22.03.2012 10:47
Как отловить обратное событие "click" ? jsuse Общие вопросы Javascript 2 18.01.2012 00:16
как реализовать передачу функции в функцию?? czp Общие вопросы Javascript 10 29.11.2011 19:21
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56