Open In App

Create OTP Input Field using HTML CSS and JavaScript

In this article, we will explore how to build an OTP (One-Time Password) input box, which is commonly used on many websites. This interactive and engaging UI element allows users to enter their OTP conveniently and efficiently. We will walk through the step-by-step process of creating this functionality using HTML, CSS, and JavaScript.

Setting up the Project

To get started, set up the project structure by creating a folder called “OTP Input” and opening it in our preferred code editor. Within this folder, create three files: index.html, style.css, and script.js. HTML5 code is used in the index.html file and set up a live server for easier development and testing.



Approach

Example: Below is the code example.




// script.js
const inputs = document.getElementById("inputs");
 
inputs.addEventListener("input", function (e) {
    const target = e.target;
    const val = target.value;
 
    if (isNaN(val)) {
        target.value = "";
        return;
    }
 
    if (val != "") {
        const next = target.nextElementSibling;
        if (next) {
            next.focus();
        }
    }
});
 
inputs.addEventListener("keyup", function (e) {
    const target = e.target;
    const key = e.key.toLowerCase();
 
    if (key == "backspace" || key == "delete") {
        target.value = "";
        const prev = target.previousElementSibling;
        if (prev) {
            prev.focus();
        }
        return;
    }
});




<!-- index.html  -->
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width,
                     initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>OTP Input</title>
    <link rel="stylesheet" href="style.css" />
</head>
 
<body>
    <div class="container">
        <div id="inputs" class="inputs">
            <input class="input" type="text"
                inputmode="numeric" maxlength="1" />
            <input class="input" type="text"
                inputmode="numeric" maxlength="1" />
            <input class="input" type="text"
                inputmode="numeric" maxlength="1" />
            <input class="input" type="text"
                inputmode="numeric" maxlength="1" />
        </div>
    </div>
    <script src="script.js"></script>
</body>
 
</html>




/* style.css */
.container {
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
}
 
.input {
    width: 40px;
    border: none;
    border-bottom: 3px solid rgba(0, 0, 0, 0.5);
    margin: 0 10px;
    text-align: center;
    font-size: 36px;
    cursor: not-allowed;
    pointer-events: none;
}
 
.input:focus {
    border-bottom: 3px solid orange;
    outline: none;
}
 
.input:nth-child(1) {
    cursor: pointer;
    pointer-events: all;
}

Output: Click here to check the live Output.




Article Tags :