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');
}
});