Javascript - 如何在填充上一个文本框后在Javascript中将焦点从一个文本框移动到另一个文本框?

时间:2017-01-26 08:13:51

标签: javascript jquery html css html5

我正在编写一个Javascript代码

请看图片。有4个文本框,只能输入一个字符。

最右边的字段的id是第一个,最左边的id是第四个

要满足4个条件

最后一个文本框 - 最右边/第一个文本框将先输入,然后第二个文本框将被填充,然后是第三个,最后是第四个

然后最右边/第一个文本框值将移位(左移)到第二个,这样值将移动,直到填满所有4个字段 - 参见屏幕截图插入

如果我们将光标放在除第一个/最右边之外的任何其他元素上,它会将光标移动到最右边,因为我们只会在最右边输入

将有退格功能,将删除最右边/第一个,即。第一个字段将被删除第四个字段值将移动到第三个,第三个字段将移动到第三个,这样,右移将以这种方式发生所有元素都将被删除 - 请参阅屏幕截图删除

在删除光标时没有停留在最右边的位置,我再次放置光标&再次删除 - 请再次参考截图删除

在插入过程中 - 当值从第一个移到第二个时,第二个应该保持焦点,现在第一个/最右边总是保持聚焦,我的意思是在插入过程中光标将始终保持在第一个但是焦点应该从右向左逐个

整个解决方案应该是Javascript,不能使用JQuery

Screenshot Insert

Screenshot Delete

var myInputs = document.getElementsByTagName("input");
var myEditable = document.getElementById("first");

for (var i = 0; i < myInputs.length; i++) {
  myInputs[i].addEventListener("click", function() {
    document.getElementById("first").focus();
  })
}

myEditable.addEventListener("keydown", function(evt) {
  /****
   *  A few things are handled here: we can check if
   *  the input is a numeric, and we can check if the input
   *  is a backspace. Nothing else is allowed.
   ****/
  if (evt.which == 8) {
    // If a backspace has been pressed, move all the input
    //  values one field UP.
    myEditable.blur();
    for (var i = myInputs.length - 1; i >= 1; i--) {
      myInputs[i].value = myInputs[i - 1].value;
    }
    myInputs[0].value = "";
  } else if (evt.which >= 48 && evt.which <= 59) {
    // Here, we have a number. Everything gets shifted to the LEFT

    if (myInputs[0].value == "") {
      for (var i = 0; i < myInputs.length - 1; i++) {
        myInputs[i].value = myInputs[i + 1].value;
      }
      myEditable.value = String.fromCharCode(evt.which);
    }
  } else {
    console.log("Sorry");
  }
});
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>

<body>
  <form>
    <input type="text" id="fourth" size="1" maxlength="1" />
    <input type="text" id="third" size="1" maxlength="1" />
    <input type="text" id="second" size="1" maxlength="1" />
    <input type="text" id="first" size="1" maxlength="1" />
  </form>
</body>

</html>

3 个答案:

答案 0 :(得分:2)

</head>
<body>
<form>

<input type="text" id="fourth" size="1" maxlength="1" />     
<input type="text" id="third" size="1" maxlength="1" />
<input type="text" id="second" size="1" maxlength="1" />
<input type="text" id="first" size="1" maxlength="1" />  

</form>
</body>
<script>
    var myInputs = document.getElementsByTagName("input");
    var myEditable = document.getElementById("first");
    for (var i = 0; i < myInputs.length; i++) {
      myInputs[i].addEventListener("click", function() {
        document.getElementById("first").focus();
      })
    }

    myEditable.addEventListener("keypress", function(evt) {
      /****
       *  A few things are handled here: we can check if
       *  the input is a numeric, and we can check if the input
       *  is a backspace. Nothing else is allowed.
       
      if (evt.which == 8) {
        // If a backspace has been pressed, move all the input
        //  values one field UP.
        //myEditable.blur();
        for (var i = myInputs.length - 1; i >= 1; i--) {
          myInputs[i].value = myInputs[i - 1].value;
        }
        myInputs[0].value = "";
      } else ****/

      if (evt.which >= 48 && evt.which <= 59) {
        // Here, we have a number. Everything gets shifted to the LEFT

        if (myInputs[0].value == "") {
          for (var i = 0; i < myInputs.length - 1; i++) {
            myInputs[i].value = myInputs[i + 1].value;
          }
          myEditable.value = String.fromCharCode(evt.which);
        }
      } else {
        console.log("Sorry");
      }
    })

 myEditable.addEventListener("keyup", function(evt) {
      /****
       *  A few things are handled here: we can check if
       *  the input is a numeric, and we can check if the input
       *  is a backspace. Nothing else is allowed.
       ****/
      if (evt.which == 8) {
        // If a backspace has been pressed, move all the input
        //  values one field UP.
        //myEditable.blur();
        for (var i = myInputs.length - 1; i >= 1; i--) {
          myInputs[i].value = myInputs[i - 1].value;
        }
        myInputs[0].value = "";
   }
});
   </script>
</html>

答案 1 :(得分:0)

看看这个。

HTML:

<input type="text" id="input3" onfocus="HandleFocus(this)" onkeypress="return HandleKeys(event, this)" value="" style="width:40px">
<input type="text" id="input2" onfocus="HandleFocus(this)" onkeypress="return HandleKeys(event, this)" value="" style="width:40px">
<input type="text" id="input1" onfocus="HandleFocus(this)" onkeypress="return HandleKeys(event, this)" value="" style="width:40px">
<input type="text" id="input0" onfocus="HandleFocus(this)" onkeypress="return HandleKeys(event, this)" value="" style="width:40px">  

使用Javascript:

function HandleFocus(obj)
{
    if (obj.id.indexOf("0")==-1) {
    document.getElementById("input0").focus();
  }
}

var content = "";
function HandleKeys(e, obj)
{
    if (obj.id.indexOf("0")!=-1)
  {
    var c = e.which;
    if ( (c==8)&&(content.length>0) ) {
        content = content.substr(0, content.length -1);
    } else if ( (c>=48)&&(c<=57)&&(content.length<4) ) {
        content += String.fromCharCode(c);
    }
    for (var i=0; i<4; i++)
        document.getElementById("input" + i.toString()).value = (i>=content.length) ? "" : content[content.length-1-i];
  }
   return false;
}

您可以在JSfiddle

中运行它

答案 2 :(得分:0)

&#13;
&#13;
</head>
<body>
<form>

<input type="text" id="fourth" size="1" maxlength="1" />     
<input type="text" id="third" size="1" maxlength="1" />
<input type="text" id="second" size="1" maxlength="1" />
<input type="text" id="first" size="1" maxlength="1" />  

</form>
</body>
<script>
    var myInputs = document.getElementsByTagName("input");
    var myEditable = document.getElementById("first");
    for (var i = 0; i < myInputs.length; i++) {
      myInputs[i].addEventListener("click", function() {
        document.getElementById("first").focus();
      })
    }

    myEditable.addEventListener("keypress", function(evt) {
      /****
       *  A few things are handled here: we can check if
       *  the input is a numeric, and we can check if the input
       *  is a backspace. Nothing else is allowed.
       
      if (evt.which == 8) {
        // If a backspace has been pressed, move all the input
        //  values one field UP.
        //myEditable.blur();
        for (var i = myInputs.length - 1; i >= 1; i--) {
          myInputs[i].value = myInputs[i - 1].value;
        }
        myInputs[0].value = "";
      } else ****/

      if (evt.which >= 48 && evt.which <= 59) {
        // Here, we have a number. Everything gets shifted to the LEFT

        if (myInputs[0].value == "") {
          for (var i = 0; i < myInputs.length - 1; i++) {
            myInputs[i].value = myInputs[i + 1].value;
          }
          myEditable.value = String.fromCharCode(evt.which);
        }
      } else {
        console.log("Sorry");
      }
    })

 myEditable.addEventListener("keyup", function(evt) {
      /****
       *  A few things are handled here: we can check if
       *  the input is a numeric, and we can check if the input
       *  is a backspace. Nothing else is allowed.
       ****/
      if (evt.which == 8) {
        // If a backspace has been pressed, move all the input
        //  values one field UP.
        //myEditable.blur();
        for (var i = myInputs.length - 1; i >= 1; i--) {
          myInputs[i].value = myInputs[i - 1].value;
        }
        myInputs[0].value = "";
   }
});
   </script>
</html>
&#13;
&#13;
&#13;

&#13;
&#13;
</head>
<body>
<form>

<input type="text" id="fourth" size="1" maxlength="1" />     
<input type="text" id="third" size="1" maxlength="1" />
<input type="text" id="second" size="1" maxlength="1" />
<input type="text" id="first" size="1" maxlength="1" />  

</form>
</body>
<script>
    var myInputs = document.getElementsByTagName("input");
    var myEditable = document.getElementById("first");
    for (var i = 0; i < myInputs.length; i++) {
      myInputs[i].addEventListener("click", function() {
        document.getElementById("first").focus();
      })
    }
  
  myEditable.addEventListener("keydown", function(evt) {
    if (!(evt.which >= 48 && evt.which <= 59)){
      evt.preventDefault();
      }
    });

    myEditable.addEventListener("keypress", function(evt) {
      /****
       *  A few things are handled here: we can check if
       *  the input is a numeric, and we can check if the input
      
      *  is a backspace. Nothing else is allowed.
       
      if (evt.which == 8) {
        // If a backspace has been pressed, move all the input
        //  values one field UP.
        //myEditable.blur();
        for (var i = myInputs.length - 1; i >= 1; i--) {
          myInputs[i].value = myInputs[i - 1].value;
        }
        myInputs[0].value = "";
      } else ****/

      if (evt.which >= 48 && evt.which <= 59) {
        // Here, we have a number. Everything gets shifted to the LEFT

        if (myInputs[0].value == "") {
          for (var i = 0; i < myInputs.length - 1; i++) {
            myInputs[i].value = myInputs[i + 1].value;
          }
          myEditable.value = String.fromCharCode(evt.which);
        }
      } else {
        console.log("Sorry");
      }
    })

 myEditable.addEventListener("keyup", function(evt) {
      /****
       *  A few things are handled here: we can check if
       *  the input is a numeric, and we can check if the input
       *  is a backspace. Nothing else is allowed.
       ****/
      if (evt.which == 8) {
        // If a backspace has been pressed, move all the input
        //  values one field UP.
        //myEditable.blur();
        for (var i = myInputs.length - 1; i >= 1; i--) {
          myInputs[i].value = myInputs[i - 1].value;
        }
        myInputs[0].value = "";
   }
});
   </script>
</html>
&#13;
&#13;
&#13;