Ошибка 'stack out of space' при обработке onpropertychange в ie<9
Имеется функция-обработчик события onpropertychange. В теле функции-обработчика содержатся многовложенные вызовы других функций.
При возникновении события возникает ошибка 'stack out of space'. При этом:
Единственное объяснение которое я нашел - когда функция-обработчик имеет большую вложенность, это приводит к эффекту подобному бесконечному рекурсивному вызову (с сайта msdn). При этом написание обработчика с меньшей вложенностью (все проверки в одной функции) в моем случае приведет к плохо структурированному коду. Сталкивался ли кто-то с такой проблемой? |
svicserg,
а можно код в студию? |
Цитата:
|
Вложений: 1
Цитата:
Прилагаю код. |
Цитата:
Цитата:
|
хм, странно не могу воспроизвести ошибку
|
Стесняюсь спросить . Весь смысл кода перевести 3 десятичных числа в 3 шестнадцатиричных и сложить их?
Серьёзный код. По настоящему требует запуска множества функций .... :) Строк 20- 30 до кучи при правильной вёрстке. Решение проблемы с переполнением стека -научиться составлять алгоритмы |
Даже очень странно. Я тестировал в IE9 в режиме браузера IE8. Сейчас попробовал запустить на другом компьютере, где стоит именно IE8 и действительно все работает...
|
Цитата:
всем спасибо за ответы! |
elem.onpropertychange = function() {
if (!elem._lock) {
setTimeout(function() {
// блокируем выполнение повторного события
elem._lock = true;
// тут много-много-много-много кода
// ....
// снимаем блокировку
elem._lock = false;
}, 0);
}
// обработчик будет спокойно отпущен
// сразу же после выполнения setTimeout();
// не ожидая выполнения вложенных скриптов
//
// повторный вызов события не запустит огромный код,
// если он был ранее запущен и еще не выполнился.
}
|
| Часовой пояс GMT +3, время: 05:49. |