J'utilise required
pour un premier contrôle avant de soumettre un formulaire.
<form action="myform.php">
Foo: <input type="text" name="someField" required="required">
<input type="submit" value="submit">
<input type="submit" value="ignore">
</form>
Le problème est que j'ai un bouton "ignorer", qui soumet également le formulaire et la logique principale définit ensuite un état correct dans une base de données. Dans ce cas (ignorer) la validation n'est pas souhaitée (car il n'est pas nécessaire de remplir le champ "Foo").
Quelle est la meilleure façon de gérer les 2 scénarios?
onclick
pour le scénario de bouton Ignorer et supprimer l'attribut juste avant d'envoyer le formulaire ( https://stackoverflow.com/a/13951500/356726 ).Mais en fait je cherche quelque chose de plus intelligent ...
--- Éditer ---
Oui, doublon de Attribut obligatoire HTML5
Aucun JavaScript, aucun deuxième formulaire nécessaire, et la validation peut rester:
Pour exactement ce cas d'utilisation, la spécification HTML5 a conçu formnovalidate
attribut pour les éléments de soumission (comme <input type=submit>
), comme l'un des attributs pour la soumission du formulaire :
L'attribut
formnovalidate
peut être utilisé pour créer des boutons de soumission qui ne déclenchent pas la validation de la contrainte.
Donc, mettez simplement
<form action="myform.php">
Foo: <input type="text" name="someField" required>
<input type="submit" value="submit">
<input type="submit" value="ignore" formnovalidate>
</form>
Votre # 2 est une approche courante. Quelque chose comme:
$('input[value="ignore"]').click(function() {
$(this).siblings('input[type="text"]').removeAttr('required');
});
Pourrait devoir utiliser mousedown pour battre soumettre.
Si vous ne voulez pas utiliser Javascript, vous pouvez en faire des formulaires séparés et avoir toutes les entrées définies comme masquées pour le formulaire ignore
.
Ce n'est pas la meilleure option, mais c'est une alternative.
Vous devez utiliser l'approche n ° 1 pour les raisons suivantes: Les principales raisons d'utiliser required
au lieu de la validation JavaScript sont qu'elles sont plus simples et fonctionnent même lorsque JavaScript est désactivé. Ici, la simplicité ne s'applique pas, car l'utilisation de required
rend les choses plus difficiles. Et cette dernière raison ne s'applique pas non plus: avec JavaScript désactivé et le navigateur prenant en charge required
, le bouton "ignorer" ne fonctionne que si certaines données sont entrées dans le champ de texte.
Une autre alternative est celle mentionnée dans la réponse de @ MattKenefick. Il pourrait même en résulter une structure et une logique plus simples. Si le formulaire est vraiment aussi simple que dans l'exemple, il est simple de le diviser en deux formulaires:
<form action="myform.php">
Foo: <input type="text" name="someField" required="required">
<input type="submit" value="submit">
</form>
<form action="myform.php">
<input type="submit" value="ignore">
</form>