Forcer l'utilisateur à remplir tous les champs avant de soumettre le formulaire
J'ai un formulaire contenant les différents champs.
Voir jsFiddle démo.
Mon but est d'activer le bouton soumettre uniquement lorsque l'utilisateur a rempli tous les champs.
Jusqu'à présent, je suis en mesure de forcer le champ titre que le contenu avant de soumettre le bouton est activé. Comment puis-je faire en sorte que tous les autres champs doivent être remplis trop avant soumettre le bouton est activé.
JS:
jQuery("input[type='text']").on("keyup", function () {
if (jQuery(this).val() != "" ) {
if (jQuery("#titlenewtide").val() != '')
{
jQuery("#subnewtide").removeAttr("disabled");
}
} else {
jQuery("#subnewtide").attr("disabled", "disabled");
}
});
HTML:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="#" method="post" id="new_tide">
Title: <input id="titlenewtide" type="text" name="title" required> <br>
Description: <textarea name="description" id="description"></textarea> <br>
Tag: <input id="newtag" type="text" name="newtag" required> <br>
Category: <input type="radio" name="category" value="19" required> Animation
<button type="submit" value="Submit" name="subnewtide" id="subnewtide" disabled="disabled">Submit</button>
</form>
Remarque que je suis le chargement du Javascript dans mon pied de page.
- Je vais bounty cette question avec plus de 100 points lors de l'admissibles dans l'espoir de trouver une solution qui fonctionne dans tous les navigateurs.
- Être heureux, j'ai heureusement une très belle solution pour télécharger bientôt.
Vous devez vous connecter pour publier un commentaire.
Sur chaque
input
changer, de tester les valeurs des autresinputs
et vérifié l'état deradio
, si tous lesinputs
a été saisi, il fera le soumettrebutton
activé:Démo:
JS:
HTML:
Aussi il utilise la forme
id="myForm"
, de sorte que vous pouvez l'utiliser pour valider les seules formes spécifiques dans vos pages.Remarque: C'est testé et de travail sur
Chrome
,Firefox
etIE
.EDIT:
Dans le code précédent, nous utilisons
onchange
gestionnaire d'événement pour appeler la fonction, donc il est seulement appelé lorsque l'on clique en dehors d'une donnée d'entrée (après modification).Pour effectuer l'appel automatiquement lorsque l'utilisateur saisit un caractère dans un champ (le dernier), nous devons utiliser les
onkeyup
cas, donc nous n'avons pas besoin de cliquer en dehors de lui.C'est le changement de code dont vous avez besoin :
JS:
HTML:
inputs
à l'aide deeach
pour appliquer le changement de gestionnaire ...inputs.change()
est la même chose$("#subnewtide").attr("disabled", "disabled");
avant de retournerfalse
.onkeyup
de l'événement au lieu de leonchange
événement pour effectuer le changement instantanément lorsque l'utilisateur entre certains personnages, prendre un coup d'oeil à mon montage, vous trouverez ce dont vous avez besoin.Utiliser ce code ci-dessous. Sur chaque entrée, il va vérifier tous les champs de formulaire à l'aide de cette fonction
validate()
.Violon
Mise à jour
Pour le faire valider si le formulaire a
id="new_tide"
et le fixer sur leradio
bouton.Violon
input
événement n'est pas disponible dans les navigateurs plus anciens, et certains ont des bizarreries lors de la suppression de caractèresid
"new_tide"function validate(){ $('input, textarea').each(function(){ if ($(this).val() === '') return false }); return true }
change, input
donc, il faut travailler maintenant sur l'ancienne version de navigateur.on()
</body>
tag.Voici comment vous pouvez le faire:
JS:
HTML:
Essayer en utilisant
.siblings()
,.map()
pour compiler les valeurs deform
éléments ,Array.prototype.every()
de retourBoolean
représentation deinput
,textarea
valeurs , définirdisabled
propriété deform input[type=submit]
élémentJS:
HTML:
De loin le plus simple, serait de s'appuyer sur la validation HTML5 que vous utilisez déjà.
Vous aurais à ajouter
required
à tous les contrôles de formulaire si vous voulez avoir besoin de tous, et qui peut être facilement fait en utilisant jQueryentrée:
sélecteur et de la définition de la propriété, commeNous allons exclure le bouton soumettre, en tant que cela n'est pas nécessaire, de toute évidence, non pas que cela aurait de l'importance dans ce cas.
Alors nous serons à l'écoute pour la
entrée
événement, qui couvre toutes sortes d'entrées, comme la dactylographie, collage, etc, et lamodifier
événement à couvrir le bouton radio.À l'aide de
form.checkValidity()
nous indique si le formulaire est valide, et renvoie un booléen, donc on peut l'utiliser directement pour définir lesdisabled
propriété de le bouton d'envoi.Tous ensemble, ça ressemble à ça, et c'est tout ce dont vous avez besoin, quelques lignes de code simple
VIOLON
Pour la prise en charge des navigateurs plus anciens qui n'ont pas la validation HTML5, vous pouvez utiliser le H5F polyfill
Pourquoi ne pas utiliser jquery valider . C'est un bon plugin .
La logique fonctionne comme, tout changement dans la forme qu'il va vérifier que le formulaire est valide ou non. Et aussi à l'aide de la errorplacement fonction, il va désactiver le message d'erreur par défaut également.
Violon
Il y a en fait assez facile d'approche. Je suis à l'aide de JavaScript natif, mais je pense qu'il est applicable en jQuery ainsi:
L'événement de changement sur la forme est toujours appelé, lors de toute entrée ou textarea élément a été changé (cliquez sur l'élément, tapez, cliquez quelque part d'autre ou de perdre le focus).
Edit:
Concernant les champs cachés, vous pouvez les exclure en entourant le permettre de calcul avec un si-condition:
Remarque:
Cela permettra de travailler dans n'importe quel navigateur (Internet Explorer 5.5). Vérifier sur MDN:
la Boucle for ..in
de l'élément.getElementsByTagName()
document.getElementById()
Pensé que je pourrais puce. En supposant que aussi peu que possible.
Voici un moyen rapide de le faire. Il consiste à fixer un
change
écouteur d'événement à:radio
et:checkbox
des éléments et uneinput
écouteur d'événement à d'autres éléments. Ceux-ci peuvent à la fois utiliser un commun prédéfinihandler
qui va compter le nombre deunfilled
élément à chaque fois que chacun de ces événements les incendies sur le bon élément.JS:
HTML:
Ma solution est base sur la norme de JavaScript.
Formulaire HTML
JavaScript
JS:
HTML: