如何防止因不必要的递归而导致IE中的堆栈溢出

时间:2011-08-16 15:51:08

标签: javascript ajax internet-explorer stack-overflow

我一直在寻找,但无济于事。

从长篇来看,我正在使用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>

现在每次我对一个字段进行更改,然后需要几秒钟才能进行更改并进行检查。 (以及在我描述的textarea上进行更改时的更多内容。)

启动IE F12调试器,我注意到很多“SCRIPT28:堆栈空间不足”“SCRIPT2343:堆栈溢出在行:”被触发。在逐步执行脚本之后,我注意到脚本在两个不同的对PHP脚本的ajax调用之间循环。我不确定我们实际上可以谈论递归,因为我没有看到这两个函数之间有任何直接联系。

所以我只能考虑两种可能性:要么在字段中触发更改,再次触发ajax调用,要么我的ajax调用出错了。

我应该在哪里解决我的问题?如果需要更多信息,请不要犹豫。

PS:我对FF / Chrome / Opera没有任何问题。

1 个答案:

答案 0 :(得分:4)

我敢打赌其中一个函数checkFormValue()textCounter()正在修改文本框,导致另一个事件被触发,然后无休止地循环。

尝试使用onBlur。