web-dev-qa-db-fra.com

Changer dynamiquement l'étiquette "readonly" du champ JForm

J'ai un JForm et quelques champs. Je voudrais désactiver un champ, si la valeur d'un autre champ est "0". Je sais que je peux le faire en préparant le formulaire lors du chargement, mais je souhaite résoudre ce problème "en direct". Par conséquent, si l'utilisateur clique dessus, le mode lecture seule doit être immédiatement défini ou désactivé.

Comment puis-je résoudre ça? Je suppose que je dois faire un peu de JQuery - malheureusement, je n'ai aucune idée de jQuery et de ce genre de choses, alors peut-être pourriez-vous m'aider?

Merci d'avance :-)

1
MyFault

Joomla a introduit un nouvel attribut de champ de formulaire appelé "showon" que vous pouvez ajouter dans le champ de formulaire xml.

L'ajout de l'attribut showon permet de masquer le champ en fonction de la valeur d'un autre champ.

Syntaxe pour afficher le champ "barre" uniquement lorsque "foo" est défini sur "1":

<field
    name="foo"
    type="list"
    >
    <option value="1">JYES</option>
    <option value="0">JNO</option>
</field>
<field
    name="bar"
    type="text"
    showon="foo:1"
/>

Pour faire correspondre plusieurs valeurs, vous pouvez fournir une liste de valeurs séparée par des virgules. Comme showon="foo:1,2"

Cela a été introduit avec PullRequest: https://github.com/joomla/joomla-cms/pull/3379 , disponible à partir de Joomla 3.2.4.

1
Sahil Purav

Vous pouvez simplement y parvenir en utilisant jQuery en ajoutant l'attribut disabled en fonction de la valeur, comme suit:

jQuery(document).ready(function($) {

    var inputFirst  = $('#jform_choose0');
    var inputSecond = $('#jform_choose1');

    inputFirst.on('change', function(){

        if ($(this).val() == 0) {
            inputSecond.prop('disabled', true);
        }
        else {
            inputSecond.prop('disabled', false);
        }

    });

});

Voici un aperçu en direct à tester:

http://jsfiddle.net/k3s6g2f7/

Vous devrez bien sûr modifier les identifiants définis en fonction de vos propres champs de saisie.

0
Lodder