2010-01-13 82 views
1

當IE中的onchange事件返回false時,IE焦點停留在該輸入框上。無論如何,在Firefox中,焦點始終會轉移到下一個字段。在IE和FireFox上的Javascript onchange不同

HTML:

input name="seminar_donation" type="text" id="seminar_donation" 
onchange="return CheckTotal(this);" 

的JavaScript:

function CheckTotal(inputbox) { 
    if (isNaN(parseInt(inputbox.value))) { 
     alert("Please enter only digits 0-9"); 
     inputbox.focus(); 
     return false; 
    } 
    return true; 
} 

在IE中我甚至都不需要inputbox.focus()不幸的是似乎沒有做任何事情在Firefox保留焦點在錯誤的輸入框中。我如何讓Firefox留在輸入框上?

回答

-1

您是否嘗試在onchange屬性中添加「return」?即

<input name="seminar_donation" type="text" id="seminar_donation" onchange="return CheckTotal(this);"> 

我不完全確定這會工作,但值得一試嗎?

編輯:爲了澄清,我不確定的原因是,我通常會以不同的方式處理這種情況,並在javascript中綁定事件處理程序而不是html。

+0

噢,是的,我試着用回報,沒有區別。 – 2010-01-13 16:43:27

+0

我將源代碼改爲「返回CheckTotal(this)」爲其他查看者的好處 – 2010-01-13 16:54:36

1

儘管這個問題稍有不同,但似乎不再出現在這裏的迴應暗示了「時機」問題。所以,我用Google搜索「超時」,發現邁克·蘭金的博客從2005年這讓我改變焦點()來解決這個問題:

var t= setTimeout('document.getElementById("seminar_donation").focus()',1); 

所以會發生什麼是火狐還是繼續到下一個區域,但1毫秒稍後,此代碼將焦點設置回錯誤字段。這是有道理的,因爲如果下一個字段有一個遺忘事件,當超時迫使焦點回來時,onblur將被觸發。但它是Firefox中一個長期存在的bug的解決方法。

+0

idem comment like @ Dave.Sol – helios 2010-01-13 17:03:00

+0

您甚至不需要超時長度爲1,它可以是0 - 計時器執行已排隊直到線程空閒,所以當前觸發的事件列表具有優先級 – 2010-01-13 17:08:35

1
setTimeout('document.getElementById("seminar_donation").focus()',1); 
+0

我假設你回答這個是因爲Firefox首先調用你的事件處理程序,而NEXT關注下一個輸入,重寫處理程序中的focus()。是說javascript在稍後執行(1毫秒),Javascript是單線程的,所以它就像「在完成所有這些之後調用」一樣。 – helios 2010-01-13 17:02:13

+0

@helios,是的,就像你描述的那樣。 – 2010-01-13 17:04:47

相關問題