在输入标签上使用此脚本,但它会在输入字母后稍微删除输入的文本

问题描述 投票:0回答:2
function formatPhoneNumber(value) {
        if (!value) return value;
        const phoneNumber = value.replace(/[^\d]/g, '');
        const phoneNumberLength = phoneNumber.length;
        if (phoneNumberLength < 4) return phoneNumber;
        if (phoneNumberLength < 7) {
          return `(${phoneNumber.slice(0, 3)}) ${phoneNumber.slice(3)}`;
        }
        return `(${phoneNumber.slice(0, 3)}) ${phoneNumber.slice(
          3,
          6
        )}-${phoneNumber.slice(6, 9)}`;
      }

function phoneNumberFormatter() {
        const inputField = document.getElementById('phone-number');
        const formattedInputValue = formatPhoneNumber(inputField.value);
        inputField.value = formattedInputValue;
      }

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="home.css">
    
   
    <title>Document</title>
</head>
<body>
    
    <input onkeydown="phoneNumberFormatter()" id="phone-number" />

    




    <script src="home.js" type="text/javascript"></script>
  </body>
</html>

我如何解决用户输入不正确类型的输入(例如字母)的问题,因为它不会被处理并显示在输入上,而是忽略它直到输入数字。

javascript html input src masking
2个回答
0
投票

改用

'input'
事件。

document.getElementById('phone-number').addEventListener('input', phoneNumberFormatter);

请注意,您必须调整在

formatPhoneNumber
功能中检查的长度。


0
投票

您需要将一个 keydown

event
对象传递到您的格式化程序中,如果它包含一个字母则阻止该事件。

例如,在您的

html
中:

<input onkeydown="phoneNumberFormatter(this, event)" id="phone-number" />

然后在你的

js

function formatPhoneNumber(value, event) {
  if (event.key < '0' || event.key > '9') {
    event.preventDefault();
    return value;
  }
  if (!value) return value;
  const phoneNumber = value.replace(/[^\d]/g, '');
  const phoneNumberLength = phoneNumber.length;
  if (phoneNumberLength < 4) return phoneNumber;
  if (phoneNumberLength < 7) {
    return `(${phoneNumber.slice(0, 3)}) ${phoneNumber.slice(3)}`;
  }
  return `(${phoneNumber.slice(0, 3)}) ${phoneNumber.slice(
    3,
    6
    )}-${phoneNumber.slice(6, 9)}`;
}

function phoneNumberFormatter(inputField, event) {
  const formattedInputValue = formatPhoneNumber(inputField.value, event);
  inputField.value = formattedInputValue;
}

这种方法将允许您阻止传入的 keydown

event
并防止
input
显示它。

如果有帮助,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.