<html><body>
<script>
function check() {
    var fld=document.getElementById("fld1");
    if (fld.value!="123")
    {
        alert("Must be 123!");
        event.returnValue = false;        
        fld.focus(); //or fld.select();
    }
 
}
</script>
<input type="text" name="fld1" onchange="check();" />
<input type="text" name="fld2" />
</body></html>

今天接獲報案,以上這段HTML在IE6上執行時,如果在fld1輸入非123的字串,點fld2後會彈出"Must be 123!",之後焦點回到fld1上,使用者若不信邪再點一次fld2,還是會彈出警語,阻止使用者離開fld1欄位,直到輸入123為止。

但同樣的程式在IE7上卻有不一樣的結果,第一次彈出警語後,若使用者"不要更改fld1的內容",再點一次fld2,此時IE7判定fld1的內容沒有改變,不算是onchange,因此就不再觸發第二次警告,使用者也得以把焦點移開fld1。

看起來,IE7對onchange的詮釋與IE6不同,我贊同Leo Horie的說法,IE7認為onchage=onblurafterchange,也就是修改後的那一次onblur才算數,從某個角度來說也沒錯,使用者沒有輸入或修改東西的情況下,是否也該算onchange? 就看你比對的對象是"上次修改前的內容"或是"上次onblur時的內容"? (或許IE Team認為他們終於把IE6錯誤的行為給校正了)

我還沒能找到說明這個行為改變的官方解釋,但現在知道的一個解決方法,是用onblur取代onchange,雖然可能觸發一些無謂的檢查,但至少同樣的Code在IE6及IE7上都管用。


Comments

Be the first to post a comment

Post a comment