Validation JavaScript pour le champ de saisie vide


95

J'ai ce champ d'entrée <input name="question"/>Je veux appeler la fonction IsEmpty lors de la soumission en cliquant sur le bouton Soumettre.

J'ai essayé le code ci-dessous mais je n'ai pas fonctionné. aucun conseil?

<html>

<head>
  <title></title>
  <meta http-equiv="Content-Type" content="text/html; charset=unicode" />
  <meta content="CoffeeCup HTML Editor (www.coffeecup.com)" name="generator" />
</head>

<body>


  <script language="Javascript">
    function IsEmpty() {

      if (document.form.question.value == "") {
        alert("empty");
      }
      return;
    }
  </script>
  Question: <input name="question" /> <br/>

  <input id="insert" onclick="IsEmpty();" type="submit" value="Add Question" />

</body>

</html>


Vous avez accepté une réponse invalide . La vérification de null est étrange car une entrée (ou zone de texte) renvoie toujours une chaîne. De plus, vous ne devez pas utiliser de JavaScript en ligne. Aussi, vous ne devriez pas utiliser aveuglément return false... etc etc
Roko C. Buljan

Réponses:


122

<script type="text/javascript">
  function validateForm() {
    var a = document.forms["Form"]["answer_a"].value;
    var b = document.forms["Form"]["answer_b"].value;
    var c = document.forms["Form"]["answer_c"].value;
    var d = document.forms["Form"]["answer_d"].value;
    if (a == null || a == "", b == null || b == "", c == null || c == "", d == null || d == "") {
      alert("Please Fill All Required Field");
      return false;
    }
  }
</script>

<form method="post" name="Form" onsubmit="return validateForm()" action="">
  <textarea cols="30" rows="2" name="answer_a" id="a"></textarea>
  <textarea cols="30" rows="2" name="answer_b" id="b"></textarea>
  <textarea cols="30" rows="2" name="answer_c" id="c"></textarea>
  <textarea cols="30" rows="2" name="answer_d" id="d"></textarea>
</form>


2
'onsubmit = "return validate ()"' doit être modifié. validate n'est pas le nom de la fonction. Il devrait être 'onsubmit = "return validateForm ()"'
tazboy

3
Il serait préférable d'expliquer la réponse et le doute d'OP.
Vishal

7
Ce accepté est en fait invalide. Les virgules dans l' ifinstruction entraîneront uniquement le retour de la dernière vérification: stackoverflow.com/a/5348007/713874
Bing

35

Voir l'exemple de travail ici


Il vous manque l' <form>élément requis . Voici à quoi devrait ressembler votre code:

function IsEmpty() {
  if (document.forms['frm'].question.value === "") {
    alert("empty");
    return false;
  }
  return true;
}
<form name="frm">
  Question: <input name="question" /> <br />
  <input id="insert" onclick="return IsEmpty();" type="submit" value="Add Question" />
</form>


Existe-t-il un moyen de le faire pour tous les champs des formulaires?
sparecycle

34

Un champ de saisie peut avoir des espaces , nous voulons éviter cela.
Utilisez String.prototype.trim () :

function isEmpty(str) {
    return !str.trim().length;
}

Exemple:

const isEmpty = str => !str.trim().length;

document.getElementById("name").addEventListener("input", function() {
  if( isEmpty(this.value) ) {
    console.log( "NAME is invalid (Empty)" )
  } else {
    console.log( `NAME value is: ${this.value}` );
  }
});
<input id="name" type="text">


1
Outre null et "", mon code me manquait également. Cela a fonctionné pour moi. Merci Roko.
Pedro Sousa

17

Je voudrais ajouter l'attribut requis au cas où l'utilisateur aurait désactivé le javascript:

<input type="text" id="textbox" required/>

Cela fonctionne sur tous les navigateurs modernes.


10
if(document.getElementById("question").value.length == 0)
{
    alert("empty")
}

7

Ajoutez un identifiant "question" à votre élément d'entrée, puis essayez ceci:

   if( document.getElementById('question').value === '' ){
      alert('empty');
    }

La raison pour laquelle votre code actuel ne fonctionne pas est que vous ne disposez pas de balise FORM. De plus, la recherche à l'aide de "nom" n'est pas recommandée car elle est obsolète.

Voir la réponse de @Paul Dixon dans cet article: L'attribut 'name' est-il considéré comme obsolète pour les balises d'ancrage <a>?


1
if(document.getElementById("question").value == "")
{
    alert("empty")
}

1
... il n'y a pas d'attribut "id" sur l' <input>élément; cela ne fonctionnerait que dans IE car IE est cassé.
Pointy

désolé, je pensais qu'il y avait un ID, document.getElementsByName ("question") [0] .value, ou ajoutez simplement un ID à l'élément
Kenneth J

1

Ajoutez simplement une étiquette d'identification à l'élément d'entrée ... c'est-à-dire:

et vérifiez la valeur de l'élément dans votre javascript:

document.getElementById ("question"). value

Oh oui, obtenez firefox / firebug. C'est la seule façon de faire du javascript.


0

Ma solution ci-dessous est en es6 car j'ai utilisé constsi vous préférez es5, vous pouvez tout remplacer constpar var.

const str = "       Hello World!        ";
// const str = "                     ";

checkForWhiteSpaces(str);

function checkForWhiteSpaces(args) {
    const trimmedString = args.trim().length;
    console.log(checkStringLength(trimmedString))     
    return checkStringLength(trimmedString)        
}

// If the browser doesn't support the trim function
// you can make use of the regular expression below

checkForWhiteSpaces2(str);

function checkForWhiteSpaces2(args) {
    const trimmedString = args.replace(/^\s+|\s+$/gm, '').length;
    console.log(checkStringLength(trimmedString))     
    return checkStringLength(trimmedString)
}

function checkStringLength(args) {
    return args > 0 ? "not empty" : "empty string";
}


0

<pre>
       <form name="myform" action="saveNew" method="post" enctype="multipart/form-data">
           <input type="text"   id="name"   name="name" /> 
           <input type="submit"/>
       </form>
    </pre>

<script language="JavaScript" type="text/javascript">
  var frmvalidator = new Validator("myform");
  frmvalidator.EnableFocusOnError(false);
  frmvalidator.EnableMsgsTogether();
  frmvalidator.addValidation("name", "req", "Plese Enter Name");
</script>

avant d'utiliser le code ci-dessus, vous devez ajouter le fichier gen_validatorv31.js


0

En combinant toutes les approches, nous pouvons faire quelque chose comme ceci:

const checkEmpty = document.querySelector('#checkIt');
checkEmpty.addEventListener('input', function () {
  if (checkEmpty.value && // if exist AND
    checkEmpty.value.length > 0 && // if value have one charecter at least
    checkEmpty.value.trim().length > 0 // if value is not just spaces
  ) 
  { console.log('value is:    '+checkEmpty.value);}
  else {console.log('No value'); 
  }
});
<input type="text" id="checkIt" required />

Notez que si vous voulez vraiment vérifier les valeurs, vous devez le faire sur le serveur, mais cela est hors de portée de cette question.


0

Vous pouvez parcourir chaque entrée après la soumission et vérifier si elle est vide

let form = document.getElementById('yourform');

form.addEventListener("submit", function(e){ // event into anonymous function
  let ver = true;
  e.preventDefault(); //Prevent submit event from refreshing the page

  e.target.forEach(input => { // input is just a variable name, e.target is the form element
     if(input.length < 1){ // here you're looping through each input of the form and checking its length
         ver = false;
     }
  });

  if(!ver){
      return false;
  }else{
     //continue what you were doing :)
  } 
})

0

<script type="text/javascript">
  function validateForm() {
    var a = document.forms["Form"]["answer_a"].value;
    var b = document.forms["Form"]["answer_b"].value;
    var c = document.forms["Form"]["answer_c"].value;
    var d = document.forms["Form"]["answer_d"].value;
    if (a == null || a == "", b == null || b == "", c == null || c == "", d == null || d == "") {
      alert("Please Fill All Required Field");
      return false;
    }
  }
</script>

<form method="post" name="Form" onsubmit="return validateForm()" action="">
  <textarea cols="30" rows="2" name="answer_a" id="a"></textarea>
  <textarea cols="30" rows="2" name="answer_b" id="b"></textarea>
  <textarea cols="30" rows="2" name="answer_c" id="c"></textarea>
  <textarea cols="30" rows="2" name="answer_d" id="d"></textarea>
</form>


Bonjour, lorsque vous fournissez une solution, il serait bon de fournir une raison pour laquelle votre solution résout le problème qui pourrait aider les futurs lecteurs.
Ehsan Mahmud
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.