Bonjour,

J'ai fait un formulaire avec une liste qui affiche différents champs selon la valeur: Pas de problème.
Maintenant, je fait un contrôle sur une date en php car je vais chercher des infos dans la bdd et si ma date n'est pas bonne, je réaffiche le formulaire. Le problème, c'est que les champs après la liste ne se réaffichent pas. Je doit changer la valeur de ma liste pour qu'ils s'affichent de nouveau. J'ai donc essayer le trigger mais rien n'y fait.
voici la ligne:
$('#type').trigger('change');

2 réponses


Je suppose que tu as un truc du genre:

$('#type').change( function(e){
    // Fait ton truc en fonction de $(this).val();
});

et que tu ne sais pas cmment déclancher la fonction anonyme qui est dedans

Remplace ceci par un appel a une fonction externe:

// Fonction qui affiche tes inputs en fonction de la valeur de ton <select>
function displayInputs(){
    var sel = $("#type").val();
    // Fais ton truc en fonction de la variable sel
}
// Tu déclenches la fonction kiki() sur un changement de ton <select>
$('#type').change( function(e){
    displayInputs();
});
// Tu peux aussi déclencher kiki() directement, en particulier lorsque tu ré-affiches ton formulaire
displayInputs();

(Note que c'est pas ce qu'il y a de plus propre, il y a d'autres méthodes plus académique je pense ... mais au moins ca a le mérite de fonctionner ;) ...)

natier
Auteur

J'ai trouvé mais j'ai un autre problème: les valeurs que j'avais saisie dans les champs qui dépendent de la liste ne se réaffichent pas alors que les autres se réaffichent.
$(document).ready(function() {
$('#champ1').hide();
$('#champ2').hide();
$('#champ3').hide();
$('#champ4').hide();
$('#champ5').hide();
$('#champ6').hide();
$('select[name="type"]').change(function() { // lorsqu'on change de valeur dans la liste
var valeur = $(this).val(); // valeur sélectionnée

if(valeur != '') { // si non vide
if(valeur == 'val1' || valeur == 'val2' || valeur == 'val3') {
$('#champ1').show();
$('#champ2').show();
$('#champ3').show();
$('#champ4').show();
} else {
//On cache les différents champs si autre valeur sélectionné
$('#champ1').hide();
$('#champ2').hide();
$('#champ3').hide();
$('#champ4').hide();
}

if(valeur == 'val3') {
$('#champ5').show();
} else{
$('#champ5').hide();
}

if(valeur == 'val4' || valeur == 'val5' || valeur == 'val6') {
$('#champ6').show();
} else{
$('#champ6').hide();
}
}
}).trigger('change');;
});