Have an idea?

Visit Sawtooth Software Feedback to share your ideas on how we can improve our products.

Grid vérification du nombre de réponses par ligne.

Dans une grille de réponse composé de 1 à plusieurs lignes et de 2 à plusieurs colonnes, je souhaite vérifier qu'il n'y a qu'un seule réponse.

Exemple :

Combien d'heures de travail supplémentaires sont réalisées selon le type de personnel  en % ou en volume par semaine :

Ligne :
R1 : personnel administratif.
R2 : personne de production.

Colonne :
C1 : En % (Numérique : 0 à 100).
C2 : En volume (0 à 80)
C3 : Je ne sais pas (case à cocher exclusive).
C4 : Refus (case à cocher exclusive).
 
Nous utilisons le code JS suivant :

var rows = $('input[name="hid_row_list_[% QuestionName() %]"]').val().split(',');
var columns = $('input[name="hid_col_list_[% QuestionName() %]"]').val().split(',');
 
for (var r = 0; r < rows.length && !strErrorMessage; r++) {
    var row = rows[r];
    var resps = 0;
    columns.forEach(function(column){
        if (SSI_GetValue('[% QuestionName() %]_r' + row + '_c' + column)) {
            resps++;
        }
    });
    if (resps != 1) {
        strErrorMessage = 'Une seule réponse par ligne.';
    }
}

Celui fonctionne bien quand la valeur numérique est supérieur à 0 en revanche quand celle-ci est égale à 0 cela ne fonctionne pas.

Je ne sais pas ce qu'il faut changer pour faire cette vérification.
Merci de votre aide.
asked Mar 24 by mustapha smail (125 points)

1 Answer

+1 vote
J'utilise un outil de traduction automatique, donc excuses pour les erreurs.

Le problème est que SSI_GetValue renvoie 0 pour les champs numériques sans réponse et pour les champs numériques auxquels on a répondu 0, nous ne pouvons donc pas l'utiliser pour différencier ces deux situations. Au lieu de cela, nous devons utiliser JavaScript / jQuery standard pour voir ce qui a été tapé dans ces champs. Essayez de mettre à jour vos "columns.forEach" comme ceci:

columns.forEach(function(column){
    var resp;
    if (column <= 2) {
        resp = $('#[% QuestionName() %]_r' + row + '_c' + column).val().trim();
    }
    else {
        resp = SSI_GetValue('[% QuestionName() %]_r' + row + '_c' + column);
    }
    if (resp) {
        resps++;
    }
});
answered Mar 24 by Zachary Platinum Sawtooth Software, Inc. (171,950 points)
J'ai intégré le code mais cela ne change rien... peut être ai-je mal fait :

var rows = $('input[name="hid_row_list_[% QuestionName() %]"]').val().split(',');
var columns = $('input[name="hid_col_list_[% QuestionName() %]"]').val().split(',');
 
for (var r = 0; r < rows.length && !strErrorMessage; r++) {
    var row = rows[r];
    var resps = 0;
    columns.forEach(function(column){
    var resp;
    if (column <= 2) {
        resp = $('#[% QuestionName() %]_r' + row + '_c' + column).val().trim();
    }
    else {
        resp = SSI_GetValue('[% QuestionName() %]_r' + row + '_c' + column);
    }
    if (resp) {
        resps++;
    }
});
    if (resps != 1) {
        strErrorMessage = 'Une seule réponse par ligne.';
    }
}
Je suis désolé, je ne suis ni bon en anglais, ni en js  :-)
Haha, je connais des anglophones qui ne maîtrisent pas la langue.

J'ai créé une question de grille avec ce script et cela semble fonctionner: je peux soumettre la page si exactement une colonne a une réponse par ligne, mais pas si aucune ou 2+ ont des réponses. N'est-ce pas ce que vous voyez? Ou ai-je mal compris comment vous voulez que le code se comporte?
Bonjour Zachary,
Merci pour ton aide. Le code ne fonctionne pas.
Si on valide en même temps la colonne 1 à 0 et la colonne 2 case à cocher la saisie n'est pas bloqué
Cdt,
Lorsque je tape 0 dans les première et deuxième colonnes et colonnes et que j'essaye de soumettre la page, je vois une erreur. Ce n'est pas ce qui se passe pour vous?

Peut-être y a-t-il un autre paramètre qui cause un mauvais comportement des choses. Serait-il possible pour vous de partager votre étude avec support@sawtoothsoftware.com afin que nous puissions l'examiner de plus près?
Bonjour Zachary,
Oui bien sur, je vous envoie un extrait de l'enquête.
Merci.
Mus.
...