web-dev-qa-db-fra.com

Les valeurs de champ de formulaire de liste Joomla changent au moment de l'exécution

J'ai deux champs de liste Joomla (champs déroulants). Le deuxième champ de liste dépend de la valeur du premier champ de liste.

Maintenant, j'ai essayé de changer les valeurs du deuxième champ de formulaire via jQuery à l'exécution. Mais cette méthode échoue, car l'inspecteur du navigateur peut voir la valeur, mais elle ne sera pas affichée dans le champ de formulaire (il semble que Joomla ait sa propre méthode pour afficher les champs d'option).

J'ai essayé:

$document->addScriptDeclaration('
    jQuery(document).ready(function () {
        jQuery("#jform_country").change(function(){
            country_id = jQuery("#" + this.id).val(); // this is the first list field
            select = document.getElementById("#jform_state");
            if (country_id == "Germany") {
                // Option 1 will be shown, but only in the inspector
                jQuery("#jform_state").append("<option value=Bavaria>Bavaria</option>");
                // Option 2 nothing happens
                var option = document.createElement("option");
                option.text = "Bavaria";
                option.value = "Bavaria";
                select.appendChild(option);
            }    
        })
    });
');

Est-il possible de remplir le champ de liste au moment de l'exécution, respectivement? changer les valeurs?

1
Perino

Si vous utilisez "Choisi" pour vos sélections, vous devez déclencher "Choisi" pour mettre à jour les données:

jQuery("#jform_state").append("<option value=Bavaria>Bavaria</option>");
jQuery("#jform_state").trigger("liszt:updated");

La version la plus récente de "Chosen" utilise un événement légèrement différent:

trigger("chosen:updated");

Mais dans Joomla 3 (au moment de l’écriture jusqu’à la version 3.4), la version de "Chosen" est plus ancienne, vous devez donc utiliser:

trigger("liszt:updated")
3
Dmitry Rekun