Welcome to the LimeSurvey Community Forum

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

Assegnare valore ad una risposta tramite javascript

More
1 month 1 hour ago #273759 by gigall
Per favore aiutaci ad aiutarti e compila dove necessario:
La tua versione di LimeSurvey: LimeSurvey Community Edition, Version 5.4.13+221128
Server proprio o LimeSurvey Cloud: Cloud
Tema:
==================
Cari esperti di LimeSurvey,

 All'inizio di un mio questionario ho una serie di domande che decidono chi partecipa solamente a una prima parte del questionario o chi risponde all'intero questionario. In pratica in base alle risposte viene calcolato se il partecipante può continuare o meno. Per fare ciò ho scritto il seguente script (dentro la scheda "script" di una domanda chiamata "redirect").
Code:
$(document).ready(function() {
    function add(accumulator, val) {
        var numericVal = Number(val);
        var logicValue = (numericVal === 0) ? 1 : 0;
        return accumulator + logicValue;
    }
 
    // Valid total count to be redirected to Part 2;
    var n_valid = 5;
 
    // Valid conditions. False evaluate to 0 and true to 1.
    // Since we have only 5 true conditions, the sum when all
    // the choices are valid must be equal to n_valid;
    var valid = [
        1 - Number("{SCR01.NAOK>=18}"),       // True;
        1 - Number("{SCR01.NAOK<=80}"),       // True;
        strcmp("{SCR03.NAOK}", "Y"),          // True;
        strcmp("{SCR05.NAOK}", "AO01"),       // True;
        strcmp("{SCR08.NAOK}", "AO01")        // True;
    ];
 
    var invalid = [
        strcmp("{SCR02.NAOK}", "AO01"),
        strcmp("{SCR02.NAOK}", "AO02"),
        strcmp("{SCR031.NAOK}", "AO01"),
        strcmp("{SCR031.NAOK}", "AO02"),
        strcmp("{SCR032.NAOK}", "AO01"),
        strcmp("{SCR032.NAOK}", "AO02"),
        strcmp("{SCR033.NAOK}", "AO01"),
        strcmp("{SCR033.NAOK}", "AO02"),
        strcmp("{SCR06_SQ002.NAOK}", "AO04"),
        strcmp("{SCR06_SQ002.NAOK}", "AO05"),
        strcmp("{SCR06_SQ003.NAOK}", "AO04"),
        strcmp("{SCR06_SQ003.NAOK}", "AO05"),
        strcmp("{SCR06_SQ004.NAOK}", "AO04"),
        strcmp("{SCR06_SQ004.NAOK}", "AO05"),
        strcmp("{SCR06_SQ006.NAOK}", "AO04"),
        strcmp("{SCR06_SQ006.NAOK}", "AO05"),
        strcmp("{SCR06_SQ007.NAOK}", "AO04"),
        strcmp("{SCR06_SQ007.NAOK}", "AO05")
    ];
 
    const valid_count = valid.reduce(add, 0);
    const invalid_count = invalid.reduce(add, 0);
    console.log(valid_count);
    console.log(invalid_count);
 
    if (valid_count === n_valid){ 
        if (invalid_count === 0) {
            console.log("Validated - User meets all criteria.");
        }
    }
    else {
        console.log("Validation Failed - User does not meet criteria.");
    }
});

è possibile assegnare a una domanda nascosta (ad esempio una domanda Y/N, chiamata "validation") un valore che codifica il fatto che il partecipante debba continuare o meno? (ad esempio, se l'if è vero, a "validation" viene assegnato un valore "Y", altrimenti un valore "N"). Questo mi servirebbe per fare in modo che le domande della seconda parte possano essere scartate in base al valore assegnato dallo script e che il partecipante vada direttamenta alla schermata di fine questionario in caso validation sia "N".

Please Log in to join the conversation.

More
3 weeks 6 days ago #273760 by lfanfoni
Qualcuno ti potrà aiutare con il Javascript, ma io ti suggerisco di usare esclusivamente le domande di tipo Equazione (nascoste) per definire il calcolo in base alle risposte fornite, e di usare le equazioni di rilevanza a livello di gruppo di domande, per mostrare o nascondere le domande in base al valore della domanda Equazione di cui sopra.
Per tutte queste operazione, suggerisco lo studio dell'Expression Manager sul Manuale

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
The following user(s) said Thank You: ritapas, gigall

Please Log in to join the conversation.

More
3 weeks 6 days ago #273764 by Joffm
Buongiorno,
Perché così complicato?
Se qualcuno dice "Ho 14 anni", è fuori.
Lo stesso vale se risponde a SCR02 con "AO02".

Pertanto, dovresti usare quote con un limite di 0; se non vuoi che ci siano persone di età inferiore ai 18 anni, non vuoi che ci siano persone che rispondano alla domanda SCR06_SQ003 con "AO04".
Fatto.

Per un'equazione, dovresti leggere il manuale e dare un'occhiata alle funzioni implementate.
E se poi usi codici "sensati" (non "AO01", "AO02",...) (Ho usato 1,2,3,...) è un'equazione semplice:
{if(SCR01.NAOK<18 OR SCR01.NAOK>80 OR SCR03.NAOK!="Y" OR countif("1",SCR05.NAOK,SCR08.NAOK)!=2 OR countifop("<","3",SCR02.NAOK,SCR031.NAOK,SCR032.NAOK,SCR033.NAOK)>0 OR countifop(">","3",SCR06.sq_T.NAOK)>0,0,1)}

Se c'è una risposta "sbagliata", il risultato è 0, altrimenti 1.

Presumo che tutte le domande siano obbligatorie.

Ma una quota (o più) è molto meglio nel tuo caso.      

Joffm

Ed è sempre una buona idea inviare l'esportazione LSS del sondaggio.

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The following user(s) said Thank You: gigall

Please Log in to join the conversation.

More
3 weeks 5 days ago #273772 by gigall
Grazie mille ad entrambi.

Il modo in cui è fatto lo script è complicato perchè ci sono delle condizioni mischiate nel mezzo che non sono riuscito ad inserire direttamente in Javascript, quindi fare semplicemente la somma dei valori validi e invalidi sulle domande a risposta multipla risolve tutti i possibili casi.

Va bene, allora penso che utilizzerò direttamente l'equazione nascosta al posto dello script. A quanto pare sembra che quello che stavo cercando di fare io (assegnare valori risposta ad una domanda tramite script) non sia il metodo giusto.

 

Please Log in to join the conversation.

Moderators: lfanfoniholchtpartner

Lime-years ahead

Online-surveys for every purse and purpose