MozTW 討論區
https://forum.moztw.org/

Firefox 在 blur 和 onblur 的反應……
https://forum.moztw.org/viewtopic.php?f=13&t=14215
1 頁 (共 1 頁)

發表人:  湯瑪士小火車 [ 2006-05-23, 08:39 ]
文章主題 :  Firefox 在 blur 和 onblur 的反應……

一個表單中的 input text 區原本是以 tab 來使其失去 focus 且會進到 tabIndex 所指的下一個區塊去。現在我想設計一個能夠接受 Enter 的 input text 區,同時在 Blur 事件發生時,還會先檢查所輸入的資料是否符合規範。因此在該 input text 的 onBlur 事件中還要指定該執行的 JavaScript function。
整個網頁的原始碼大約如下:
代碼:
<html>
  <head>
  <script type="text/javascript">
  function checkValue() {
    if (document.getElementById("valueNeedToBeChecked").value<0) {
      alert("格式錯誤!");
      // Firefox 會在此處發生錯誤
      document.getElementById("valueNeedToBeChecked").focus();
    } else {
      document.getElementById("nextInputText").focus();
    }
  }

  function checkEnter(e) {
    if (剛剛按下的鍵為 Enter) {
    // 如果使用者按下的鍵是 "Enter",就使 valueNeedToBeChecked 物件失去 focus,而自動進入該物件的 onBlur 事件 --> 執行 checkValue()
      document.getElementById("valueNeedToBeChecked").blur();
    }
  }
  </script>
  </head>

<body>
<form id="thisForm">
  <input type="text"
     id="valueNeedToBeChecked"
     name="valueNeedToBeChecked"
     onblur="checkValue()"
     onkeypress="checkEnter(event)">
  <input type="text"
     id="nextInputText">
</form>
</body>
</html>

以上的程式碼原則上在 IE 中執行的很好,但是在 Firefox 中就會有一點問題。問題是出現在當輸入的格式錯誤時(上例為負數),會出現警告視窗,Firefox 到這裡也還好。但是在按下警告視窗的『確定』鈕後,cursor 並不會在原來的 input text 區出現,如果任意輸入資料也不知道跑到那裡去。一定得用滑鼠將游標設定原來的 input text 去才行。

有人了解我的意思嗎?為何 Firefox 的反應會這樣呢?就差這一點了!這個網頁已經儘量貼近使用者在輸入習慣上的需求,同時我自我要求所寫的程式除了 IE 可以執行外,在 Firefox 下也要能執行無誤。但現在以 Firefox 來執行竟然會有一點小麻煩,而顯得沒有達到使用者的需求。有解嗎?

發表人:  yuoo2k [ 2006-05-23, 09:50 ]
文章主題 : 

雖然我也不清楚為什麼會這樣...
不過根據我寫套件的經驗,遇到這種莫名奇妙作完後結果不在預期中的事情的時候
window.setTimeout( MyFunction , 0); 進行非同步處理好像就行了...

試了一下好像真的可以...
把您標註會出錯那行換成以下這樣...
代碼:
window.setTimeout( function(){ document.getElementById("valueNeedToBeChecked").focus(); }, 0);

發表人:  湯瑪士小火車 [ 2006-05-23, 11:50 ]
文章主題 :  大哥,您太神了!

真的可以了!大哥,請受小弟一拜。 :lol:

如果用 Error Console 來看,會發現另一個不影響執行結果的小問題:
當使用者按下 Enter 後,會在 checkEnter() 中以 obj.blur() 的方式離開此 function,但是因為最後並沒有 return 回原物件的動作,所以用 Error Console 來檢查的時候會出現警告訊息。訊息如下:
代碼:
Error: '
P³å-š property XULElement.selectedIndex' when calling method: [nsIAutoCompletePopup::selectedIndex] = NS_ERROR_XPC_JS_THREW_STRING
Source file: http://localhost/94apply/stuff/fillform.php
Line: 73


這樣倒底有沒有關係?

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/