Javascript.RU

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

Ошибка 'stack out of space' при обработке onpropertychange в ie<9
Имеется функция-обработчик события onpropertychange. В теле функции-обработчика содержатся многовложенные вызовы других функций.
При возникновении события возникает ошибка 'stack out of space'.

При этом:
  • для других событий, например keyup, эта же функция-обработчик работает правильно
  • если функцию-обработчик упростить (просто выводить какой-то alert) для onpropertychange она будет работать

Единственное объяснение которое я нашел - когда функция-обработчик имеет большую вложенность, это приводит к эффекту подобному бесконечному рекурсивному вызову (с сайта msdn).

При этом написание обработчика с меньшей вложенностью (все проверки в одной функции) в моем случае приведет к плохо структурированному коду.

Сталкивался ли кто-то с такой проблемой?
Ответить с цитированием
  #2 (permalink)  
Старый 21.03.2013, 13:29
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 16.12.2011
Сообщений: 4,415

svicserg,
а можно код в студию?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 21.03.2013, 14:18
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,589

Сообщение от svicserg
При этом написание обработчика с меньшей вложенностью (все проверки в одной функции) в моем случае приведет к плохо структурированному коду.
Сложный выбор , между неработающим но структурированным кодом и работающим кодом. Даже не знаю что бы выбрал
Ответить с цитированием
  #4 (permalink)  
Старый 21.03.2013, 14:37
Новичок на форуме
Отправить личное сообщение для svicserg Посмотреть профиль Найти все сообщения от svicserg
 
Регистрация: 21.03.2013
Сообщений: 4

Сообщение от dmitriymar Посмотреть сообщение
Сложный выбор , между неработающим но структурированным кодом и работающим кодом. Даже не знаю что бы выбрал
Вот я и пытаюсь понять что же служит реальной причиной проблемы. А потом уже приму решение как поступить. Это же нормально?

Прилагаю код.
Вложения:
Тип файла: zip ColorChanger.zip (66.6 Кб, 3 просмотров)
Ответить с цитированием
  #5 (permalink)  
Старый 21.03.2013, 14:43
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,589

Сообщение от svicserg
Вот я и пытаюсь понять что же служит реальной причиной проблемы.
Сообщение от svicserg
Единственное объяснение которое я нашел - когда функция-обработчик имеет большую вложенность, это приводит к эффекту подобному бесконечному рекурсивному вызову (с сайта msdn).
Именно это и есть. Стек вызовов функций ограничен по размеру .
Ответить с цитированием
  #6 (permalink)  
Старый 21.03.2013, 14:58
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 16.12.2011
Сообщений: 4,415

хм, странно не могу воспроизвести ошибку
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #7 (permalink)  
Старый 21.03.2013, 15:06
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,589

Стесняюсь спросить . Весь смысл кода перевести 3 десятичных числа в 3 шестнадцатиричных и сложить их?

Серьёзный код. По настоящему требует запуска множества функций ....
Строк 20- 30 до кучи при правильной вёрстке.
Решение проблемы с переполнением стека -научиться составлять алгоритмы
Ответить с цитированием
  #8 (permalink)  
Старый 21.03.2013, 15:12
Новичок на форуме
Отправить личное сообщение для svicserg Посмотреть профиль Найти все сообщения от svicserg
 
Регистрация: 21.03.2013
Сообщений: 4

Даже очень странно. Я тестировал в IE9 в режиме браузера IE8. Сейчас попробовал запустить на другом компьютере, где стоит именно IE8 и действительно все работает...
Ответить с цитированием
  #9 (permalink)  
Старый 21.03.2013, 15:17
Новичок на форуме
Отправить личное сообщение для svicserg Посмотреть профиль Найти все сообщения от svicserg
 
Регистрация: 21.03.2013
Сообщений: 4

Сообщение от dmitriymar Посмотреть сообщение
Стесняюсь спросить . Весь смысл кода перевести 3 десятичных числа в 3 шестнадцатиричных и сложить их?

Серьёзный код. По настоящему требует запуска множества функций ....
Строк 20- 30 до кучи при правильной вёрстке.
Решение проблемы с переполнением стека -научиться составлять алгоритмы
согласен, кода много, а эффект не большой ))) просто это как часть нечто большего задуманного мной и функции объектов для проверки различного содержимого я буду использовать повторно в других участках программы. А вообще - это моя первая программка и учиться естественно мне есть чему )))

всем спасибо за ответы!
Ответить с цитированием
  #10 (permalink)  
Старый 21.03.2013, 16:10
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

elem.onpropertychange = function() {
    if (!elem._lock) {
        setTimeout(function() {
            // блокируем выполнение повторного события
            elem._lock = true;

            // тут много-много-много-много кода
            // ....

            // снимаем блокировку
            elem._lock = false;
        }, 0);
    }

    // обработчик будет спокойно отпущен
    // сразу же после выполнения setTimeout();
    // не ожидая выполнения вложенных скриптов
    //
    // повторный вызов события не запустит огромный код,
    // если он был ранее запущен и еще не выполнился.
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при обработке xml tmlder AJAX и COMET 4 29.10.2010 11:11
IE выдает ошибку при обработке скрипта sailormoon Javascript под браузер 1 10.08.2010 08:20
Ошибка в IE8 (win7): Stack overflow at line: 0 dmitriy1982x Работа 1 20.06.2010 17:06
ошибка при нажатии на кретик дочернего окна olgatcpip Javascript под браузер 2 04.02.2010 19:53
Ошибка при добавлении обработчика к событию Riim Events/DOM/Window 32 19.01.2010 13:17