Welcome to the LimeSurvey Community Forum

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

Caricare dinamicamente le risposte di una domanda di tipo "Array"

  • seccalisca
  • seccalisca's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
1 day 16 hours ago #270758 by seccalisca
Per favore aiutaci ad aiutarti e compila dove necessario:
La tua versione di LimeSurvey:  LimeSurvey Community Edition - Version 5.6.68+240625
Tema:
==================
Buonasera a tutti,
devo creare un form da inviare ad un lista di utenti ("Venditori").
Ciascun utente ha diverse aree di competenza ("Regioni") che vengono registrate, al momento della creazione del db dei partecipanti, in un campo ATTRIBUTE separate dal ";"  (Es "Lazio;Abruzzo;Marche")
Devo preparare un form che contenga una sola domanda "Indica le Aree di competenza che hai potuto seguire" e risposta "Sì" o "No".
Sarebbe carino poter creare un array, le cui righe vengano popolate dinamicamente a seconda di quante regioni ha ciascun utente (ogni utente le ha diverse per numero e contenuto).
Ho chiesto al "nostro" amico chatGPT se poteva darmi una soluzione e la risposta è stata quella di utilizzare un JavaScript all'interno della domanda ma non ho avuto successo: non succede nulla.
Ve lo copio qui, qualcuno è in grado di aiutarmi a capire se lo script è scritto male e dove? Io sono una mezza schiappa 
Code:
<script type="text/javascript">
$(document).ready(function(){
    // Recupera la lista delle regioni dal campo token personalizzato
    var regioniString = '{TOKEN:regioni}';
    var regioni = regioniString.split(";");
 
    // Rimuove tutte le righe tranne la prima
    $('#question{QID} .subquestion-list tr').slice(1).remove();
 
    // Clona la prima riga come template
    var templateRow = $('#question{QID} .subquestion-list tr:first').clone();
 
    // Pulisce la riga template
    templateRow.find('th').text('');
    templateRow.find('input[type=radio]').prop('checked', false);
 
    // Aggiunge le righe con le regioni reali
    for (var i = 0; i < regioni.length; i++) {
        var newRow = templateRow.clone();
        newRow.find('th').text(regioni[i]);
        // Cambia il nome degli input per mantenerli univoci
        newRow.find('input').each(function(){
            var oldName = $(this).attr('name');
            var newName = oldName.replace(/X[0-9]+X[0-9]+/, 'X{QID}X' + (i+1));
            $(this).attr('name', newName);
        });
        $('#question{QID} .subquestion-list').append(newRow);
    }
 
    // Rimuove la riga di esempio
    $('#question{QID} .subquestion-list tr:first').remove();
});
</script>
 

 

Please Log in to join the conversation.

  • lfanfoni
  • lfanfoni's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
23 hours 30 minutes ago #270761 by lfanfoni
Javascript non è il mio forte, quindi ti posso soltanto suggerire una soluzione con l'Expression Manager.
Ipotizzando che un utente possa avere al massimo 10 regioni di competenza, dovresti definire 10 attributi aggiuntivi della tabella dei partecipanti. Per ogni partecipante, caricherai le etichette delle regioni in questi campi, ovviamente dove non c'è la regione dovrai lasciare in bianco...esempio: se ne hai 3, allora i primi 3 campi aggiuntivi saranno pieni e gli altri 7 saranno vuoti.
Sulla domanda Array dovrai definire 10 sottodomande, in ognuna di essa dovrai personalizzare l'etichetta visibile della riga con una cosa tipo {TOKEN:ATTRIBUTE_1}, in modo da mostrare la regione presente nel primo campo aggiuntivo di quel rispondente. Inoltre dovrai mettere una equazione di rilevanza sempre per ogni sotto domanda, in modo da mostrare le riga solo se è presente una regione. Dovresti poter usare una espressione tipo questa:
!is_empty(TOKEN:ATTRIBUTE_1)
Sono andato a memoria, quindi se non ti funziona la sintassi, controlla sul manuale, alla pagina dell'Expression Manager

Se mi vuoi contattare, non mandare messaggi privati qui, bensì scrivi a lfanfoni at gmail.com
Per le livestream in italiano vai su: www.youtube.com/playlist?list=PLOSjjxAG9...SiiCsSz_JxIH7xJwLdPd
Le soluzioni LimeSurvey per l'Italia si trovano su: github.com/lfanfoni

Please Log in to join the conversation.

Moderators: lfanfoniholchtpartner

Lime-years ahead

Online-surveys for every purse and purpose