bootstrapValidator: Comment ajouter et supprimer des validateurs de manière dynamique à un champ de saisie?
J'ai un formulaire dynamique qui est lié avec knockout.js
et validé par bootstrapValidator
.
Il y a un champ de saisie qui doit être "nécessaire-validé" dépendant de l'état d'un autre contrôle.
Le champ de saisie:
<textarea id="inputReason" name="inputReason" rows="3"
class="form-control col-lg-8"
data-bind="value: Reason" />
Pertinentes de la partie javascript de ko-viewmodel:
self.SelectAbsenceType = function (absenceType) {
self.SelectedID(absenceType.ID);
if (self.SelectedAbsenceType().ReasonRequired) {
$('#formCreate').bootstrapValidator('addField', 'inputReason', {
validators: {
notEmpty: {
message: 'Please enter a reason'
}
}
});
} else {
$('#formCreate').bootstrapValidator('removeField', 'inputReason');
}
}
Le problème que je me pose est qu'un appel à removeField
de la bootstrapValidator
instance ne semble pas supprimer complètement toutes les infos car il y a une exception javascript dans le updateStatus
méthode de la bootstrapValidator
classe qui en fait ne devrait pas être appelée à tous depuis que j'ai supprimé le terrain avant d':
var that = this,
type = fields.attr('type'),
group = this.options.fields[field].group || this.options.group,
total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;
L'exception: Impossible d'obtenir la valeur de la propriété 'groupe': l'objet est null ou undefined
La variable field
contient la valeur 'inputReason'.
Donc ma Question est celle-ci (parce que la documentation de bootstrapValidators removeField
n'est pas tout à fait clair sur ce point: Comment puis-je supprimer dynamiquement ajoutés à la validation du champ inputReason completey?
(note de côté: quelqu'un peut-ajout de la balise boostrapvalidator?)
Vous devez vous connecter pour publier un commentaire.
Ok, après quelques recherches, il semble que le bootstrapValidator Plugin simplement ne marche pas encore en charge la suppression des validateurs qui sont attachés à un champ de saisie qui ne doit PAS être enlevé dans le même processus. Ainsi, les événements qui sont attachés à la zone de saisie qui déclenchent la validation ne sont pas enregistrées.
Une solution temporaire est de détruire la bootstrapValidator exemple, définir la
data-*
attribut de la forme à null et réinitialiser le plugin. Ce code remplace lebootstrapValidator.removeField()
appel:mise à jour
Un autre encore meilleur moyen de faire ceci est d'utiliser l'activer/désactiver la fonction de bootstrapValidator:
(merci à @nghuuphuoc pour le signaler)