diff --git a/Cron/Functions.php b/Cron/Functions.php index 714b0f16..5c647b2d 100755 --- a/Cron/Functions.php +++ b/Cron/Functions.php @@ -190,9 +190,8 @@ function contruireParamLike($param) } function liste_options($liste, $val_def, $strict = false) { - // On met le libellé directement dans l'option vide - $libelle_def = (est_anglophone()) ? "-- Select --" : "-- Sélectionner --"; - $select = $strict ? '' : ''; + // On laisse l'option vide de texte. C'est le JS qui gérera l'affichage. + $select = $strict ? '' : ''; foreach ($liste as $option): $selected = ($val_def == $option["code"]) ? ' selected' : ''; diff --git a/Js/fonctions.js b/Js/fonctions.js index 8f817cb9..6b763fbf 100755 --- a/Js/fonctions.js +++ b/Js/fonctions.js @@ -47685,16 +47685,22 @@ function formAjoutTableRef() { // Filtrer la liste des villes par pays function filtreVilleParPays() { const $selectVille = $('#codeVille'); + const codePays = $('#codePays').val(); + + if (!codePays) return; $.ajax({ url: $("#racineWeb").val() + "Ajaxfiltrevilleparpays/", type: 'post', - data: { codePays: $('#codePays').val() }, + data: { codePays: codePays }, success: function(htmlOptions) { - // On vide et on remplace les options (on ne touche pas au select lui-même) - $selectVille.empty().append(htmlOptions); - - // On appelle notre fonction de sécurité + // On remplace le contenu + $selectVille.html(htmlOptions); + + // On force la désélection pour que le placeholder s'affiche + $selectVille.val(''); + + // On appelle la fonction de sécurité actualiserSelectPicker('#codeVille'); } }); @@ -91643,20 +91649,27 @@ function initDataTableReference(selector, exportTitle = 'Export_Donnees') { function actualiserSelectPicker(selector) { $(selector).each(function() { const $el = $(this); + const lang = $("#codeLangue").val(); + const txtDefault = (lang === 'en_US') ? "-- Select --" : "-- Sélectionner --"; - // On nettoie les attributs qui pourraient forcer un placeholder fantôme + // 1. On supprime physiquement les attributs qui causent le doublage dans le bouton $el.removeAttr('title').prop('title', ''); + $el.attr('data-none-selected-text', txtDefault); + // 2. On vérifie si l'instance existe if (!$el.data('selectpicker')) { $el.selectpicker({ liveSearch: true, style: 'btn-white border-2 border-start-0 fw-bold', width: '100%', size: 8, - // On ne définit PAS noneSelectedText ici car il est dans le HTML (PHP) - liveSearchPlaceholder: ($("#codeLangue").val() === "en_US") ? "Search..." : "Rechercher..." + noneSelectedText: txtDefault, // Source unique du texte + noneResultsText: (lang === 'en_US') ? "No results" : "Aucun résultat", + liveSearchPlaceholder: (lang === 'en_US') ? "Search..." : "Rechercher..." }); } else { + // 3. Si elle existe, on met à jour le texte proprement avant le refresh + $el.data('selectpicker').options.noneSelectedText = txtDefault; $el.selectpicker('refresh'); } });