[jQuery] 使用Enter鍵來移動焦點至下個輸入元素

使用Enter鍵來移動焦點至下個輸入框

前言

 

使用者需求及習慣是開發者必須考量的環節,就像明明可以使用Tab鍵來切換輸入框,但客戶的習慣卻是使用Enter鍵;因此本持著服務至上的精神,就來研究一下如何實作出該功能。

 

 

實作說明

 

流程大概就是在所有輸入元素上綁定Key Down事件,並在事件中判斷是否按下Enter鍵(KeyCode: 13),如果符合上述條件就尋找下個輸入元素,並且給予焦點於該元素中。

 

在搜尋下個輸入元素時,可先利用 :input 取出所有input, textarea, select 及 button元素,然後在以當下輸入元素序號(index) 加一來獲得下個輸入元素。但由於畫面上可能有些輸入框是被隱藏或失效的,當然就不希望被列入下個候選輸入框中;因此使用 :visible:enabled 來確保不符合條件的輸入框會被排除在外。最後將該輸入框 focus就大功告成了。以下參考。

 

$(function () {
  // setup enter to next input element function
  setupEnterToNext();
});


// enter to next input element function
function setupEnterToNext() {

  // add keydown event for all inputs
  $(':input').keydown(function (e) {

    if (e.keyCode == 13 /*Enter*/) {

        // focus next input elements
        $(':input:visible:enabled:eq(' + ($(':input:visible:enabled').index(this) + 1) + ')').focus();
        e.preventDefault();
    }

  });
}

 


測試畫面如下,包含diabled及hidden Input Element各一個,以此情境測試是否能正常運作。

 

image

 

<!DOCTYPE html>
<html>
<head>
    <meta name="description" content="Enter跳至下一個輸入框">
    <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
    <meta charset="utf-8">
    <title>JS Bin</title>
</head>
<body>

    <!-- 1. input -->
    <input type="text"><br><br>

    <!-- 2. disabled input -->
    <input type="text" disabled="disabled" value="skip this"><br><br>

    <hr>
    contain a hidden input here
    <div style="display: none">
        <fieldset>
            <table>
                <!-- 3. hidden input -->
                <td> <input type="text"> <br></td>
            </table>
        </fieldset>
    </div>
    <hr><br>

    <!-- 4. input -->
    <input type="text"> <br><br>

    <!-- 5. select -->
    <select>
        <option value="">Please Select</option>
        <option value="1">USD</option>
        <option value="2">JPY</option>
    </select>
    <br><br>

    <!-- 6. input -->
    <input type="text"> <br>

</body>
</html>

 

實際演練一下,當按下Enter時會跳至下個輸入元素中,不會被diabled及hidden的Input Element所影響。

enter2next

 


參考資訊

 

https://api.jquery.com/input-selector/
http://stackoverflow.com/questions/290535/best-way-to-find-next-form-input-element-in-jquery


希望此篇文章可以幫助到需要的人

若內容有誤或有其他建議請不吝留言給筆者喔 !