Lorsque je saisi 50, le champ est transformé en 50,00; les deux champs de droite restent cachée alors qu’il devraient s’afficher. Si je saisie 50 de nouveau, cette fois il s’affichent bien.
De même que lorsque je saisi 0, il restent affiché, mais si je saisi de nouveau 0, il sont bien cachés.
Est-ce qu’il y a un problème avec le reformatage en décimal ou bien est-ce la méthode de mes impacts qui est mal codée ?
Voila les log en fonction des saisies:
Saisie 1 : 50, log: null
Saisie 2 : 50, log: 50
Saisie 3 : 0, log: 50
Saisie 3 : 0, log: 0
Votre contrainte fonctionne correctement.
Les 2 attributs Pourcentage sont bien visibles/invisibles au changement de valeur du Montant.
C’est dans le changement de la valeur du Montant que se déclenche la propriété Visible/Non visible des attributs.
D’accord chez moi elle ne fonctionne pas donc voilà quelques élément supplémentaires :
La contrainte est de type front-end uniquement avec expression “true”. Le code présenté ci dessus est dans les deux impacts qui concernent ces deux champs.
De ce que j’ai pu constater, à chaque fois que je modifie, il prend l’ancienne valeur et pas la nouvelle
J’ai aussi testé une alternative qui traite les montants null/vides mais sans succès:
Je suis passé par le javascript en supprimant toutes les contraintes, même problème. Le script est déclenché 2 fois pour chaque changement. j’ai saisi 5, puis 0.
// NamExamen front side hook
(function(ui) {
if (!ui) return;
var app = ui.getAjax();
// Hook called by each object instance
Simplicite.UI.hooks.NamExamen = function(o, cbk) {
try {
console.log("NamExamen hooks loading...");
var p = o.locals.ui;
if (p && o.isMainInstance()) {
console.log("Javascript");
p.form.onload = function(ctn, obj) {
var f1 = ui.getUIField(ctn, obj, "xx");
var f2 = ui.getUIField(ctn, obj, "xx");
// Hide the fields at loading
f1.ui.visible(Simplicite.VIS_HIDDEN);
f2.ui.visible(Simplicite.VIS_HIDDEN);
var field = ui.getUIField(ctn, obj, "montant");
field.ui.on("input change", function() {
console.log("Change");
var v=field.ui.val();
console.log(v);
f1.ui.visible(v==0 ? Simplicite.VIS_HIDDEN: Simplicite.VIS_FORM);
f2.ui.visible(v==0 ? Simplicite.VIS_HIDDEN: Simplicite.VIS_FORM);
});
};
}
}
catch(e) {
app.error("Error in Simplicite.UI.hooks.NamExamen: " + e.message);
}
finally {
console.log("NamExamen hooks loaded.");
cbk && cbk(); // final callback
}
};
})(window.$ui);
change = quand on sort du champ (enter, tab, blur…)
Donc forcement quand on tape 5 + enter ou tab, ça déclenche 1 “input” et 1 “change”.
C’est le fonctionnement nominal d’un champ input.
Mettez l’un l’autre suivant votre besoin mais pas les 2 évènements.
Une contrainte se déclenche qu’au “change”. Donc si le besoin est de déclencher un trigger à chaque frappe clavier, il faut donc coder comme l’indique @nathalie et utiliser “input” ou “keyup”.