web-dev-qa-db-fra.com

supprimer la propriété requise du champ de saisie lors de la soumission du formulaire

Modèle:

[Display(Name = "City"]
[Required]
[RegularExpression(@"^(?!\d$).*$"]
[StringLength(20,MinimumLength = 2]
public string City { get; set; }

Forme:

@Html.LabelFor(x => x.City, new { @class = "control-label" })
@Html.TextBoxFor(x => x.City, new {id="city" })

Scénario: 

<script>
  $(document).ready(function () {   
    $("#identificationForm").submit(function (e) {
      var required=document.getElementById("city").required;
      console.log(required);
      // e.preventDefault();
     });
  });
</script>

Je veux supprimer la propriété requise si une condition est remplie.Unable de le faire de cette façon.Comment puis-je y parvenir?

11
user2137186

JavaScript est sensible à la casse.

Utilisation

document.getElementById("city").required = false;

Manifestation

Veillez à ce que votre code ne fonctionne pas lorsque vous essayez d'accéder à l'élément avant qu'il n'existe. Placez votre script après l'élément si vous n'exécutez pas le code sur un événement:

<input type="text" id="city" required>
<script>
if(somecondition is true){
    document.getElementById("city").required = false;
}
</script>

Notez également que vous ne pouvez pas modifier cela dans une fonction d'envoi et que votre formulaire doit être soumis car il est trop tard: ce gestionnaire d'événements ne sera pas appelé si le champ requis n'est pas renseigné!

28
Denys Séguret

Vous pouvez utiliser:

document.getElementById("city").removeAttribute("required");

ou avec jQuery

$('#city').removeAttr('required')
10
j08691

Vous devriez faire ceci:

if(somecondition is true)
{
  var city = document.getElementById("city");
  city.removeAttribute('required');
}
4
Fals

En php c'est très facile, cela ne validera pas votre formulaire lors de la soumission,

<input type="submit" onclick="return confirm('Are you sure?')" value="Abort Test" formnovalidate>
1
Sarfaraz Ansari

Au moment où la fonction On Submit doit supprimer l'attribut requis, le formulaire aurait déjà passé la validation. Les étapes sont d'abord que vous devez désactiver la validation, vous pourrez alors soumettre le formulaire avec les champs requis vides. Ensuite, supprimez les attributs requis et appelez enfin manuellement la validation via $.validator.unubtrusive.parse(form). Le formulaire sera alors validé en appelant les autres types de validation tels que string length et formatting, tout le reste sauf les attributs requis. Vérifiez if form.valid() then submit() else ne faites rien.

1
rasmicah

Si vous placez vos champs de texte dans un formulaire, il est possible de remplacer le champ requis par un attribut spécial appelé novalidate. C'est la syntaxe: <form novalidate> .. </form>

Voici un exemple:

<form novalidate>
  Zip code: <input type="text" name="zipcode" pattern="[0-9]{5}" required><br/>

  <input type="submit">
</form>

L'attribut novalidate Voici un lien avec deux démonstrations en direct utilisant l'attribut novalidate.

0
S. Mayol

Vous ne savez pas encore si quelqu'un a trouvé une meilleure façon de le faire et ce n'est peut-être pas le moyen le plus efficace, mais vous pouvez utiliser PHP pour y parvenir. Si la condition que vous souhaitez remplir est connue avant le chargement de la page, vous pouvez obtenir ceci:

<input type="text" id="city" 

<?php
     if (condition_is_met) {
          echo ">";
     } else {
          echo "required>";
     }
?>
0
Sean Ciminello