为什么这个事件会被解雇?

时间:2013-01-31 22:11:41

标签: javascript cross-browser infinite-loop

此脚本检查表单是否已正确填写,但toggle()函数一直被触发(至少在FireFox中)。在下面的示例中,“now here”在表单有效后继续显示(即所有字段都有一些文本)。

<script type="text/javascript">
        <!--
        function toggle()
        {
            if(document.getElementById('username').value.length > 1 && document.getElementById('pw1').value.length > 1 && document.getElementById('pw2').value.length > 1 && (document.getElementById('pw1').value == document.getElementById('pw2').value))
            {
                alert("now here")
                document.getElementById('submit').disabled = false
            }
        }
//-->
</scipt>
Username:<input type="text" name='username' id='username' maxlength="30" onkeyup="toggle()"/><br />
        Password:<input type="password" name="pw1" id="pw1" onkeyup="passwordCheck(document.getElementById('pw1'), document.getElementById('pw2')); toggle()"/><br />
        Confirm password:<input type="password" name="pw2" id="pw2" onkeyup="passwordCheck(document.getElementById('pw1'), document.getElementById('pw2')); toggle()"/>

我想知道为什么onkeyup会被解雇?好像用户永远不会把手指放在钥匙上。是因为onkeyup在调整警报窗口时被搞砸了,因为焦点从文本字段变为窗口,按下确定后焦点会变回文本字段?

更新:我在Bugzilla中found it here。你可以vote for it。自2001年底以来一直有报道,它为什么豆这么长而且不固定???

3 个答案:

答案 0 :(得分:1)

看起来您希望该函数在正确填写表单时将提交更改从禁用更改为启用。每次使用所有三个输入调用onKeyUp时,该函数都会触发,因为您在所有三个输入中调用它。

我的jsfiddle(http://jsfiddle.net/BhaeG/)仅在if语句的所有条件都正确时触发alert("now here")

除非我真的错过了某些东西,否则它似乎正在按设计工作。

答案 1 :(得分:1)

在FireFox中,如果您在警告窗口按Enter键,则会触发onKeyUp

答案 2 :(得分:0)

我通过使用onkeydown而不是onkeyup解决了这个问题。 YMMV。