2013-01-31 69 views
0

該腳本檢查表單是否已正確填寫,但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由於焦點從文本字段改變到窗口而改變了警告窗口時被搞砸了,並且當確定被按下時焦點變回到文本字段?

更新:I found it here在Bugzilla中。您可以vote for it。據報道,自2001年底以來,它爲什麼豆這麼長,而不是固定的?

+0

因爲其性能低於預期? – thang

+0

[內聯事件處理程序不好。](http://robertnyman.com/2008/11/20/why-inline-css-and-javascript-code-is-such-a-bad-thing/) – jbabey

+0

什麼是密碼檢查嗎?爲什麼不提交這些測試? –

回答

1

在Firefox中,如果你按一個警告窗口上的回車鍵它激發onKeyUp

1

看起來像你想要的功能,使表單被正確填寫時提交從禁用到啓用更改。每次使用全部三個輸入調用onKeyUp時,該函數應該會觸發,因爲您在所有三個輸入中調用它。

我的jsfiddle(http://jsfiddle.net/BhaeG/)僅在if語句的所有條件都正確時觸發alert("now here")

除非我真的錯過了一些東西,它似乎是按照設計工作的。

+0

這在FireFox中很奇怪,它反覆彈出「現在在這裏」,但在IE中它工作正常。 – Celeritas

+0

有點奇怪,因爲我在mac上使用最新的ver FF格式的js小提琴,並且按照所述工作。我會檢查其他瀏覽器/平臺。 – dmayo

+1

雖然這是多年以前的事情,但已經有人報道過了(https://bugzilla.mozilla.org/show_bug.cgi?id=112298),我猜想它沒有得到關注。 – Celeritas

0

我解決此問題得到了通過的onkeyup的onkeydown事件代替。因人而異。