Как предотвратить переполнение стека в IE из-за нежелательной рекурсии - PullRequest
4 голосов
/ 16 августа 2011

Я долго искал, но безрезультатно.

В длинной форме я делаю проверки с помощью javascript и использую атрибут "onchange" для их выполнения. Недавно я обнаружил, что в IE следует использовать атрибут «onpropertychange», так как событие «onchange» обрабатывается неправильно.

Итак, теперь у меня есть, например, поле такого типа (не все поля имеют события onKeyDown или onKeyUp):

<textarea name="shdescription" rows="1" cols="75" onKeyDown="textCounter(this,'shdesccounter',65)"
onKeyUp="textCounter(this,'shdesccounter',65)" onchange="checkFormValue();" onpropertychange="checkFormValue();"></textarea>

И теперь каждый раз, когда я вносю изменение в поле, требуется несколько секунд, чтобы зарегистрировать изменение и выполнить проверку. (и больше, когда изменение сделано в текстовой области, которую я описал.)

Запустив отладчик IE F12, я заметил, что много "SCRIPT28: недостаточно места в стеке" и "SCRIPT2343: переполнение стека в строке:" сработало. Пошагово выполняя скрипт, я заметил, что скрипт зацикливается между двумя разными вызовами ajax PHP-скриптов. Я не уверен, что на самом деле мы можем говорить о рекурсии, поскольку я не вижу прямой связи между двумя функциями.

Таким образом, я могу думать только о двух возможностях: либо есть изменение, инициируемое в поле, которое снова вызывает вызов ajax, либо я делаю что-то не так с моими вызовами ajax.

Куда мне обратиться, чтобы решить мою проблему? Если вам нужна дополнительная информация, не стесняйтесь спрашивать.

PS: У меня нет таких проблем с FF / Chrome / Opera.

1 Ответ

4 голосов
/ 16 августа 2011

Держу пари, что одна из функций checkFormValue() или textCounter() изменяет текстовое поле таким образом, что вызывает другое событие, которое продолжает бесконечный цикл.

Попробуйте использовать onBlur.

...