早期 DOS 時代,資料輸入人員習慣按 Enter 鍵換行輸入。Windows 普及後,標準行為改為 Tab 鍵或滑鼠點擊切換焦點,造成舊用戶適應困難。本文提供一個通用 JavaScript 方案,在 ASP.NET (含 VB.NET、C#) 網頁中實現 Enter 鍵自動跳至下一個可輸入控制項。
利用 DOM 的 document.forms[0].elements 集合遍歷表單所有元素,在 onkeypress 事件中攔截鍵碼 13 (Enter),依據元素類型決定是否移動焦點至下一個可輸入控制項(文字框、下拉選單、核取方塊等),並自動選取文字內容方便覆寫。
var JumpTypeArray = new Array("text","password","textarea","checkbox","radio",
"select","select-one","select-multiple","file"); // 可獲得焦點的元素類型
var DebarTypeArray = new Array("submit","reset","button","checkbox","radio",
"select","select-one","select-multiple","hidden"); // 需排除自動選取文字的類型
function inStrArray(src, dec) {
for (var i = 0; i < dec.length; i++) {
if (src == dec[i]) return i;
}
return -1;
}
function checkCR(evt) {
evt = evt || window.event;
var node = evt.target || evt.srcElement;
var frm = document.forms[0]; // 僅支援單一表單頁面
if (evt.keyCode == 13 && inStrArray(node.type, JumpTypeArray) != -1) {
for (var i = 0; i < frm.elements.length; i++) {
if (frm.elements[i].name == node.name) {
if ((i + 1) < frm.elements.length) {
if (inStrArray(frm.elements[i+1].type, JumpTypeArray) != -1) {
frm.elements[i+1].focus();
if (inStrArray(frm.elements[i+1].type, DebarTypeArray) == -1) {
frm.elements[i+1].select();
}
}
return false; // 取消表單提交
} else {
return true; // 最後一個元素允許提交
}
}
}
}
}
document.onkeypress = checkCR;
WebEnter.js。<script language="JavaScript" src="path/WebEnter.js"></script><form> 表單。name 屬性唯一)。Windows 9x/NT/2000/XP + ASP/JSP/PHP/ASP.NET + IE 4.x+