Maison >interface Web >js tutoriel >Comment restreindre la saisie de texte HTML pour n'accepter que des valeurs numériques ?

Comment restreindre la saisie de texte HTML pour n'accepter que des valeurs numériques ?

DDD
DDDoriginal
2024-12-15 13:52:26370parcourir

How to Restrict HTML Text Input to Only Accept Numeric Values?

Autoriser uniquement la saisie numérique dans la saisie de texte HTML

Introduction

Les saisies de texte HTML autorisent les utilisateurs pour saisir du texte, mais que se passe-t-il si vous souhaitez limiter la saisie aux chiffres uniquement ? Cela peut être utile pour collecter des données telles que des numéros de compte ou des codes PIN.

Solution JavaScript

Une façon d'y parvenir consiste à utiliser JavaScript. Voici une fonction JavaScript qui filtre les caractères non numériques :

function setInputFilter(textbox, inputFilter, errMsg) {
  [
    "input",
    "keydown",
    "keyup",
    "mousedown",
    "mouseup",
    "select",
    "contextmenu",
    "drop",
    "focusout",
  ].forEach(function (event) {
    textbox.addEventListener(event, function (e) {
      if (inputFilter(this.value)) {
        // Accepted value
        if ([
          "keydown",
          "mousedown",
          "focusout",
        ].indexOf(e.type) >= 0) {
          this.classList.remove("input-error");
          this.setCustomValidity("");
        }
        this.oldValue = this.value;
        this.oldSelectionStart = this.selectionStart;
        this.oldSelectionEnd = this.selectionEnd;
      } else if (this.hasOwnProperty("oldValue")) {
        // Rejected value: restore the previous one
        this.classList.add("input-error");
        this.setCustomValidity(errMsg);
        this.reportValidity();
        this.value = this.oldValue;
        this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
      } else {
        // Rejected value: nothing to restore
        this.value = "";
      }
    });
  });
}

Utilisation de la solution

Pour utiliser cette fonction, vous pouvez transmettre une fonction au setInputFilter qui vérifie si l'entrée est numérique :

setInputFilter(document.getElementById("numericInput"), function (value) {
  return /^\d*\.?\d*$/.test(value); // Allow digits and '.' only
}, "Only numbers and '.' allowed");

Cela limitera le champ de saisie de texte numericInput à accepter uniquement caractères numériques (et le point décimal).

Remarque

N'oubliez pas d'appliquer la classe CSS d'erreur d'entrée pour styliser le champ de saisie lorsqu'une valeur non valide est saisie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn