Javascript 如何防止IE中由于不需要的递归而导致堆栈溢出

Javascript 如何防止IE中由于不需要的递归而导致堆栈溢出,javascript,ajax,internet-explorer,stack-overflow,Javascript,Ajax,Internet Explorer,Stack Overflow,我已经找了一段时间了,但没有找到 在一个长表单中,我使用javascript进行检查,并使用属性“onchange”进行检查。最近,我发现在IE上,应该使用“onpropertychange”属性,因为“onchange”事件处理不正确 例如,我有这样的字段(并非所有字段都有onKeyDown或onkeydup事件): 现在,每次我对字段进行更改时,都需要几秒钟的时间才能注册更改并进行检查。(当在我描述的文本区域进行更改时,情况会更糟。) 启动IEF12调试器时,我注意到许多“SCRIPT2

我已经找了一段时间了,但没有找到

在一个长表单中,我使用javascript进行检查,并使用属性“onchange”进行检查。最近,我发现在IE上,应该使用“onpropertychange”属性,因为“onchange”事件处理不正确

例如,我有这样的字段(并非所有字段都有onKeyDown或onkeydup事件):


现在,每次我对字段进行更改时,都需要几秒钟的时间才能注册更改并进行检查。(当在我描述的文本区域进行更改时,情况会更糟。)

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

因此,我只能想到两种可能性:要么是字段中触发的更改再次触发ajax调用,要么是我的ajax调用出了问题

我应该在哪里解决我的问题?如果需要更多信息,请随时询问


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

我敢打赌,
checkFormValue()
textCounter()
中的一个函数正在修改文本框,导致另一个事件触发,并持续循环


尝试使用onBlur。

如果是这样的话,我在FF/Chrome/Opera和onchange事件中不也会遇到问题吗?因为事实并非如此。我只对IE有问题。如果没有onpropertychange属性,onchange属性不会触发,有了它,我就遇到了我描述的问题。在这种情况下,你不能使用onBlur来代替吗?“如果是这样,我在FF/Chrome/Opera中不也会有问题吗?”--如果回调正在修改文本区域的某些属性,而不是
(比如
焦点
),则不会。这会导致调用onpropertychange,但不会调用onchange。使用onBlur就可以了,谢谢。以前从未使用过此事件。在我的用例中,它能代替onchange吗?好的,很高兴知道。为了回答您文章中的问题,根据@Malvolio所说的,checkFormValue()会在一个字段的检查未通过时将类更改为无效,在检查通过时将类更改为有效。
<textarea name="shdescription" rows="1" cols="75" onKeyDown="textCounter(this,'shdesccounter',65)"
onKeyUp="textCounter(this,'shdesccounter',65)" onchange="checkFormValue();" onpropertychange="checkFormValue();"></textarea>