How to partition input field to appear as separate input fields on screen?

前端 未结 7 1835
半阙折子戏
半阙折子戏 2020-11-29 21:12

Look at the image:

I want design something like in the image, where a 4 digit one time password (OTP) is to be entered by user. Right now I have achieved th

7条回答
  •  野性不改
    2020-11-29 21:53

    I know this question is old. I stumbled upon this when I was trying to achieve the same for my project.

    I couldn't find what I needed. So I made one myself with the ideas from here

    You can use this with any number of characters and needs no change in javascript as long as all the input fields are inside a div with id="otp".


    Here is a preview:


    Take a look at the code here

    function OTPInput() {
      const inputs = document.querySelectorAll('#otp > *[id]');
      for (let i = 0; i < inputs.length; i++) {
        inputs[i].addEventListener('keydown', function(event) {
          if (event.key === "Backspace") {
            inputs[i].value = '';
            if (i !== 0)
              inputs[i - 1].focus();
          } else {
            if (i === inputs.length - 1 && inputs[i].value !== '') {
              return true;
            } else if (event.keyCode > 47 && event.keyCode < 58) {
              inputs[i].value = event.key;
              if (i !== inputs.length - 1)
                inputs[i + 1].focus();
              event.preventDefault();
            } else if (event.keyCode > 64 && event.keyCode < 91) {
              inputs[i].value = String.fromCharCode(event.keyCode);
              if (i !== inputs.length - 1)
                inputs[i + 1].focus();
              event.preventDefault();
            }
          }
        });
      }
    }
    OTPInput();
    @import url('https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css');
    .form-control {
      -webkit-transition: none;
      transition: none;
      width: 32px;
      height: 32px;
      text-align: center
    }
    
    .form-control:focus {
      color: #3F4254;
      background-color: #ffffff;
      border-color: #884377;
      outline: 0;
    }
    
    .form-control.form-control-solid {
      background-color: #F3F6F9;
      border-color: #F3F6F9;
      color: #3F4254;
      transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
    }
    
    .form-control.form-control-solid:active,
    .form-control.form-control-solid.active,
    .form-control.form-control-solid:focus,
    .form-control.form-control-solid.focus {
      background-color: #EBEDF3;
      border-color: #EBEDF3;
      color: #3F4254;
      transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
    }

提交回复
热议问题