Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

tableau à double entrée

  • alieutaud
  • alieutaud's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
3 years 10 months ago #210464 by alieutaud
tableau à double entrée was created by alieutaud
Bonjour,
Je souhaite construire une question sous forme de tableau à double entrée (quelle est votre pratique de méditation X à quelle fréquence la pratiquez-vous), en permettant aux personnes d'incrémenter les lignes du tableau :
est-il possible que les personnes puissent incrémenter leurs propres pratiques (il peut y avoir plusieurs lignes, donc proposer un bouton "ajouter une ligne") et en face de chaque ligne créée, les colones de choix sont automatiquement présentées et sont fixes (l'intensité de la pratique est fixée par une échelle de 4-5 choix pré-déterminée, de type bouton radio car un seul choix possible par ligne) et à cocher impérativement (question obligatoire)
D'avance je vous remercie
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 10 months ago #210473 by Joffm
Replied by Joffm on topic tableau à double entrée
Quelque chose comme ca?
 
Code:
<script type="text/javascript" charset="utf-8">
    $(document).on('ready pjax:scriptcomplete',function(){
        var thisQuestion = $('#question{QID}');
    
        // Insert selects
        $('.answer-item.answer_cell_X002', thisQuestion).addClass('with-select').append('<select class="inserted-select form-control list-question-select">\
                                                    <option value="">...</option>\
                                                    <option value="1">Option 1</option>\
                                                    <option value="2">Option 2</option>\
                                                    <option value="3">Option 3</option>\
                                                    <option value="4">Option 4</option>\
                                                </select>');
        // Listeners
        $('.inserted-select', thisQuestion).on('change', function(i) {
            if($(this).val() != '') {
                $(this).closest('.answer-item').find('input:text').val($.trim($('option:selected', this).text())).trigger('change');
            }
            else {
                $(this).closest('.answer-item').find('input:text').val('').trigger('change');
            }
        });
                    
        // Returning to page
        $('.with-select input:text', thisQuestion).each(function(i) {
            var thisCell = $(this).closest('.answer-item');
            var inputText = $.trim($(this).val());
            var selectval = $('select.inserted-select option', thisCell).filter(function () { return $(this).html() == inputText; }).val();
            $('select.inserted-select', thisCell).val(selectval);
        });
    
        // Clean-up styles
        $('select.inserted-select', thisQuestion).css({
            'max-width': '100%'
        });
        $('.with-select input:text', thisQuestion).css({
            'position': 'absolute',
            'left': '-9999em'
        });
    });
 
</script> <script>
$(document).ready(function() {
 
   // A function to add or remove rows of an Array (Multi Flexible)(Text) question
    function varLengthArray(qID) {
        
        if ($('#question'+qID+'').length > 0) {
            
            // The HTML content of the Add/Remove elements - modify as you wish
            var addContent = '[+] Ajouter';
            var removeContent = '[-] Retirer';
 
            // Create the Add and Remove elements &amp; insert them
            var el1 = document.createElement('div');
            el1.setAttribute('id','addButton'+qID);
            el1.setAttribute('class','btn btn-primary');
            document.body.appendChild(el1);
            var el2 = document.createElement('div');
            el2.setAttribute('id','removeButton'+qID);
            el2.setAttribute('class','btn btn-primary');
            document.body.appendChild(el2);
 
            // Move them to after the array
            $( 'div#addButton'+qID ).appendTo($( '#question' + qID + ' table.ls-answers' ).parent());
            $( 'div#removeButton'+qID ).appendTo($( '#question' + qID + ' table.ls-answers' ).parent());
 
            // Insert their HTML
            $( 'div#addButton'+qID ).html( addContent );
            $( 'div#removeButton'+qID ).html( removeContent );
 
            // Style the elements - you can modify here if you wish
            $( 'div#addButton'+qID ).css({
                'margin':'10px 0 0 10px',
                'padding':'1px',
                'text-align':'center',
                'width':'auto',
                'cursor':'pointer',
                'float':'left'
            });
 
            $( 'div#removeButton'+qID ).css({
                'margin':'10px 0 0 10px',
                'padding':'1px',
                'text-align':'center',
                'width':'auto',
                'cursor':'pointer',
                'float':'left'
            });
 
            // Initially hide the Remove element
            $( 'div#removeButton'+qID ).hide();
 
            // Call the functions below when clicked
            $( 'div#addButton'+qID ).click(function (event) {
                addRow(qID);
            });
            $( 'div#removeButton'+qID ).click(function (event) {
                removeRow(qID);
            });
 
            // Function to add a row, also shows the Remove element and hides the
            //Add element if all rows are shown
            function addRow(qID) {
                var arrayRow = '#question' + qID + ' table.ls-answers tr.subquestion-list';
                var rowCount = $( arrayRow ).size() - 1;
                $( arrayRow + '[name="hidden"]:first' ).attr('name', 'visible').show();
                $( 'div#removeButton'+qID ).show();
                if ( $( arrayRow + ':eq(' + rowCount + ')' ).attr('name') == 'visible' )  {
                    $( 'div#addButton'+qID ).hide();
                }
            }
 
            // Function to remove a row, also clears the contents of the removed row,
            // shows the Add element if the last row is hidden and hides the Remove
            // element if only the first row is shown
            function removeRow(qID) {
                var arrayRow = '#question' + qID + ' table.ls-answers tr.subquestion-list';
                var rowCount = $( arrayRow ).size() - 1;
                $( arrayRow + '[name="visible"]:last input[type="text"]' ).val('');
                $( arrayRow + '[name="visible"]:last' ).attr('name', 'hidden').hide();
                $( 'div#addButton'+qID ).show();
                if ( $( arrayRow + ':eq(1)' ).attr('name') == 'hidden' )  {
                    $( 'div#removeButton'+qID ).hide();
                }
            }
 
            // Just some initialization stuff
            var arrayRow = '#question' + qID + ' table.ls-answers tr.subquestion-list';
            var rowCount = '';
 
            // Initially hide all except first row or any rows with populated inputs
            $( arrayRow ).each(function(i) {
                if ( i > 0 ) {
                    // We also need to give the hidden rows a name cause IE doesn't
                    // recognize jQuery :visible selector consistently
                    $( this ).attr('name', 'hidden').hide();
 
                    $('input[type=text]', this).each(function(i) {
                        if ($(this).attr('value') != '') {
                            $(this).parents('tbody:eq(0)').attr('name', 'visible').show();
                            $( 'div#removeButton'+qID ).show();
                        }
                    });
                    rowCount = i;
                }
            });
        }
    }
 
    // Call the function with a question ID
    varLengthArray({QID});
 
});
 
</script>

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 10 months ago #210474 by Joffm
Replied by Joffm on topic tableau à double entrée
Et ainsi de suite avec
Code:
<script type="text/javascript" charset="utf-8">
  $(document).on('ready pjax:scriptcomplete',function(){
    var thisQuestion = $('#question{QID}');
    // Add a question class
    thisQuestion.addClass('custom-array');
 
    // Column-specific classes
    $('table.subquestion-list tr', thisQuestion).each(function(i) {
      $('th, td', this).each(function(i) {
        $(this).addClass('column-'+i);
      });
    });
  });
</script>
Code:
<style type="text/css">.custom-array table.subquestion-list col {
    width: auto !important;
  }
 
  .custom-array table.subquestion-list thead .column-0 {  width: 5%; }
  .custom-array table.subquestion-list thead .column-1 {  width: 75%; }
  .custom-array table.subquestion-list thead .column-2 {  width: 20%; }
</style>

 

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
  • alieutaud
  • alieutaud's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
3 years 10 months ago #210478 by alieutaud
Replied by alieutaud on topic tableau à double entrée
Oui c'est exactement ça !!
mais je ne sais pas comment intégrer ce script à mon questionnaire ... y a-t-il une page de Limesurvey où je dois le copier-coller ? je travaille en ligne, sur limesurvey basic ... Je suis désolée, je ne connais pas cette facette "programmation" de Limesurvey, merci d'avance de votre aide :-)
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 10 months ago #210479 by Joffm
Replied by Joffm on topic tableau à double entrée
code source du texte de la question

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
  • alieutaud
  • alieutaud's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
3 years 10 months ago #210480 by alieutaud
Replied by alieutaud on topic tableau à double entrée
 
J'ai trouvé une réponse que vous avez fait à quelqu'un antérieurement, indiquant où copier-coller votre proposition.
J'ai bien sélectionné le mode "Source" de la question et copier votre proposition après mon énoncé. Mais le tableau que vous avez réussi à produire n'apparaît pas. seulement les boutons ajouter/retirer (qui ne fonctionnent pas) ...
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 10 months ago #210484 by Joffm
Replied by Joffm on topic tableau à double entrée
un tableau(text)

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
  • alieutaud
  • alieutaud's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
3 years 10 months ago #210492 by alieutaud
Replied by alieutaud on topic tableau à double entrée
J'ai exploré de nombreux tutos pour comprendre comment utiliser les scripts. J'ai bien remplacé le QID par sa valeur (52 dans mon questionnaire), coché l'option "réponse multiples", et rien n'y fait : je n'obtiens pas votre magnifique tableau. Il y a visiblement une info qui me manque. Il y a surement d'autres remplacements à faire, mais je ne sais pas lesquels. Merci d'avance pour votre aide complémentaire !
The topic has been locked.
  • alieutaud
  • alieutaud's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
3 years 10 months ago - 3 years 10 months ago #210493 by alieutaud
Replied by alieutaud on topic tableau à double entrée
oups, tableau(text). changement fait. Mais ça ne donne toujours rien ...
J'ai fouillé l'assistance suivante que vous avez faite ( forums.limesurvey.org/forum/french-forum...3%A9roulantes#206253 )
Mais je n'arrive même pas à importer votre exemple (Limesurvey me renvoie un code erreur pour défaut de definition du langage dans l'enquête importée)
Je suis très débutante, mais normalement je finis toujours par comprendre :-)
Merci pour votre compréhension et votre patience
 
Last edit: 3 years 10 months ago by alieutaud. Reason: montrer que j'ai cherché par moi-même et éviter de multiplier les messages
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 years 10 months ago #210496 by Joffm
Replied by Joffm on topic tableau à double entrée
Où est votre problème?

Vous répondez à une question de type "matrice (texte)", insérez les sous-questions,
par ex.
axe y:
SQ001: 1.
SQ002:  2.
...

Axe X:
X001: Pratique
X002: Fréquence

Vous avez vu en javascript que l'axe X est codé avec "X001", "X002", non?

Et ajoutez le javascript et le css au code source de la question.
C'est tout.

Et NON:

J'ai bien remplacé le QID par sa valeur

{QID} est automatiquement remplacé par le code.

coché l’optique" réponse multiples "

Où cela devrait-il être?

Vous devez envoyer votre tentative une fois en tant qu'export lss.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team & Official Partner
  • LimeSurvey Community Team & Official Partner
More
3 years 10 months ago #210498 by DenisChenu
Replied by DenisChenu on topic tableau à double entrée
Il faut que tu aide plus à résoudre ton problème, par exemple :

1. Créer le système avec cette juste cette question et
2. Monter un lien d'exemple avec juste cette question
3. Exporter le fichier lss avec juste cette quetsion.
Ici @Joffm est obligé de travailler à l'aveugle.

Denis

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member. - Professional support - Plugins, theme and development .
I don't answer to private message.
The topic has been locked.
  • alieutaud
  • alieutaud's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
3 years 9 months ago #210553 by alieutaud
Replied by alieutaud on topic tableau à double entrée
Merci Joffm et DenisJ'ai reconstruit la question à part, dans une survey fictive. J'ai choisi tableau(text) et saisi deux lignes X (1 et 2), puis les deux Y (Pratique et Fréquence), comme indiqué par Joffm.Quand je reviens à la question en mode Source, il n'y a rien que ma question qui apparaît. Aucun codage.J'ai quand même ajouté le code de Joffm.Dans l'aperçu je vois que mon tableau est changé,* il n'a plus qu'une seule ligne (1), le bouton "ajouter" apparaît. Mais il disparaît quand j'ajoute une ligne. Il n'y a plus alors que le bouton "retirer"* il n'y a pas les "options" dans la colonne "Fréquence"Je vous joins un screenshot de la création du tableau après insertion du code et un fichier txt de l'export(conversion avec Notepad++ car le système impose un format d'export en xml bien qu'il annonce qu'il s'agit d'un .lss). Je suis désolée de ces tatonements. J'espère que c'est correct quand même pour m'aider ?
D'avance merci !
The topic has been locked.
Moderators: Nickkoholchtpartner

Lime-years ahead

Online-surveys for every purse and purpose