從事對日外包一年多以來,發現日本的無論是WinForm項目還是Web項目都注重快捷鍵的使用,日本人操作的時候都喜歡用鍵盤而不是用鼠標去點,用他們的話來說"鍵盤永遠比鼠標來的快",所以他們很注重鍵盤的操作,常見的操作就是按下Tab鍵來切換鼠標的焦點,按下回車鍵時能夠提交表單等,難得今天周末,有時間好好研究一下在web開發中設置快捷鍵,這樣可以方便用戶操作,並且增強用戶體驗。
在web開發中主要是使用HTML的表單元素自帶的tabindex屬性和使用js設置組合快捷鍵來實現快捷鍵,
一、為HTML的表單元素設置tabindex來實現快捷鍵
有如下的一段HTML代碼:
1 <div class="login-tr-title">用戶登錄</div> 2 <table class=" table-refer"> 3 <tr> 4 <td class="login-td-title"> 5 用戶ID 6 </td> 7 <td> 8 <input id="txtUserName" name="txtUserName" type="text" 9 tabindex="1" maxlength="30" title="用戶ID"/> 10 </td> 11 </tr> 12 <tr> 13 <td class="login-td-title"> 14 密碼 15 </td> 16 <td> 17 <input id="txtPassword" name="txtPassword" type="password" 18 tabindex="2" maxlength="30" title="密碼" /> 19 </td> 20 </tr> 21 </table> 22 <ul class="login-button"> 23 <li class="login-main-button"> 24 <asp:Button ID="btnLogin" runat="server" Text="登錄" TabIndex="3" CssClass="s-button"/> 25 </li> 26 </ul> 27 </div>
這段HTML代碼中每一個表單控件都設置了一個tabindex屬性,屬性值從小到大,控件設置上tabindex屬性后,按下鍵盤上的Tab鍵切換光標時,光標就會按照控件設置的tabindex從小到大(1→2→3)順序來切換了,這樣就可以做到使用鍵盤上的Tab鍵來控制鼠標焦點落到按tabindex設置的順序落到相應的控件上,按照w3c 的規定tabindex的取值范圍是:0~32767。
在web項目按下回車鍵時是做不到按照tabindex的設置順序來切換鼠標焦點的,為了使按下回車鍵時也能按照tabindex的設置順序來切換鼠標焦點,可以用JavaScript去控制回車鍵的響應動作,實現代碼如下:
1 $(document).ready(function () { 2 $("form").keydown(function (e) { 3 var actE = document.activeElement; 4 var nxtE = $("[tabindex='" + actE.tabIndex + "']")[0]; 5 if (nxtE != null) { 6 var oType = nxtE.type; 7 if (oType == "textarea") return; 8 } 9 var tabIndex = actE.tabIndex + 1; 10 var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode; 11 if (keyCode == 13) { 12 if (nxtE != null) { 13 oType = nxtE.type; 14 switch (oType) { 15 case "button": { if (nxtE.click) nxtE.click(); return false; } 16 case "select-one": { break; } 17 case "submit": { return true; } 18 default: break; 19 } 20 } 21 22 nxtE = $("[tabindex='" + tabIndex + "']")[0]; 23 if (!nxtE) nxtE = $("[tabindex='0']")[0]; 24 if (nxtE != null) { 25 nxtE.focus(); 26 // var oType = nxtE.type; 27 // switch (oType) { 28 // case "button": { if (nxtE.click) nxtE.click(); break; } 29 // case "select-one": { break; } 30 // case "submit": { return true; } 31 // default: break; 32 // } 33 } 34 else { 35 return true; 36 } 37 return false; 38 } 39 }); 40 });
二、使用js 設置組合快捷鍵
使用js設置快捷鍵的本質就是獲得你要設置的這個鍵的keyCode 的值,如果要加ctrl,alt,shift,那么就添加一個ctrlkey,altKey,shiftKey來判斷下,所以關鍵在於獲取keycode的值。
(1) 設置 ctrl +enter 提交
1 if (e.ctrlKey && e.keyCode == 13){ 2 return submit(); 3 }
(2) 設置 Alt+ 方向鍵 ←提交
1 if (e.altKey&& e.keyCode == 37){ 2 return submit(); 3 }
(3) 設置 shift+F10 提交
1 if (e.shiftKey&& e.keyCode == 37){ 2 return submit(); 3 4 }
(4) 設置enter 提交
1 if (e.keyCode == 13){ 2 return submit(); 3 }
一些常見的快捷鍵的KeyCode:

1 keycode 8 = BackSpace BackSpace 2 keycode 9 = Tab Tab 3 keycode 12 = Clear 4 keycode 13 = Enter 5 keycode 16 = Shift_L 6 keycode 17 = Control_L 7 keycode 18 = Alt_L 8 keycode 19 = Pause 9 keycode 20 = Caps_Lock 10 keycode 27 = Escape Escape 11 keycode 32 = space space 12 keycode 33 = Prior 13 keycode 34 = Next 14 keycode 35 = End 15 keycode 36 = Home 16 keycode 37 = Left 17 keycode 38 = Up 18 keycode 39 = Right 19 keycode 40 = Down 20 keycode 41 = Select 21 keycode 42 = Print 22 keycode 43 = Execute 23 keycode 45 = Insert 24 keycode 46 = Delete 25 keycode 47 = Help