Comparaison de deux valeurs numérique dans une même question

More
5 years 7 months ago #75958 by darknico84
darknico84 created the topic: Comparaison de deux valeurs numérique dans une même question
Bonjour,

Dans mes expérimentations limesurveyienne, j'aimerais pour des réponses multiples numériques pouvoir comparer les deux valeurs au moment de la validation. Ainsi si la première valeur entrée est inférieure à la seconde je balance un message d'erreur. Le truc c'est qu'avec le code suivant il ne se passe pas grand chose :

<script type="text/javascript" charset="utf-8">
function validation()
{
if ({INSERTANS:51145X130X6212SQ001}<{INSERTANS:51145X130X6212SQ02})
{
alert("Cela n est pas possible");
}
}
setTimeout("validation()",250);
</script>


ça ne fonctionne pas non plus avec les balises d'ouverture <script> ou <script LANGUAGE=javascript>

Où me trompe-je ? Ou cela n'est-il pas possible ainsi.

Si d'aventure vous avez des idées n'hésitez pas.

Merci d'avance.

Nicolas

Please Log in to join the conversation.

More
5 years 7 months ago - 5 years 7 months ago #75961 by DenisChenu
DenisChenu replied the topic: Comparaison de deux valeurs numérique dans une même question
Salut,

Les INSERTANS ne servent que sur les pages suivantes.

Ici, les INSERTANS ne sont pas encore remplis, il faut donc utiliser les valeurs des champs de saisie.

Je pense qu'il va falloir faire un truc du genre:
<script type="text/javascript" charset="utf-8">
 $(document).ready(function() {
   $('#movenextbtn, #movesubmitbtn').click(function(){
     if ($('#answerSSSSXGGGGXQQQQsubQ1')<$('#answerSSSSXGGGGXQQQQsubQ2'))
     {
       alert ('Cela n\'est pas possible');
       return false;
     }
     else
     {
       return true;
     }
   });
});
</script>

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).
An error happen ? Before make a new topic : remind the Debug mode .
Last Edit: 5 years 7 months ago by DenisChenu.
The following user(s) said Thank You: darknico84

Please Log in to join the conversation.

More
5 years 7 months ago - 5 years 7 months ago #75981 by darknico84
darknico84 replied the topic: Comparaison de deux valeurs numérique dans une même question
Merci beaucoup pour toutes ces informations. Je vais tester cela ce soir quand je ne passerai plus par un proxy car pour le moment ça ne change pas grand chose.
Pour ma culture perso, le "sub" entre le numéro de question et le numéro de réponse indique que l'on veut le résultat soumis par l'utilisateur ? (j'ai testé avec ou sans sub)

Voilà donc à quoi devrait ressembler mon code
<script type="text/javascript" charset="utf-8">
 $(document).ready(function() {
   $('#movenextbtn, #movesubmitbtn').click(function(){
     if ($('#answer51145X130X6212subSQ001')<$('#answer51145X130X6212subSQ002'))
     {
       alert ('Cela n\'est pas possible');
       return false;
     }
     else
     {
       return true;
     }
   });
});
</script>

Pour information, existe-t-il un dictionnaire des "objets" et règles de nommage limesurvey ? Afin de savoir comment utiliser les #answer INSERTANS etc... ?
Last Edit: 5 years 7 months ago by darknico84.

Please Log in to join the conversation.

More
5 years 7 months ago #76001 by TMSWhite
TMSWhite replied the topic: Comparaison de deux valeurs numérique dans une même question
In 1.92, you can use the new "Question validation equation" and "Question validation equation tip" ( docs.limesurvey.org/Advanced+question+se..._validation_equation ) to accomplish this.

Here is a working example similar to your question - Demo192.limesurvey.org/index.php?sid=65354&lang=en

It asks you to enter the ages of your children in descending order. The multiple numeric question has 4 sub-questions named sq1-sq4, so the Question validation equation is:
q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4

and the question validation tip is
You must enter the ages of your children in descending order

There is a new CSS style called em_q_fn_validation that controls the visibility of this message. The default templates prevent this from appearing until the page has been submitted. However, you can change that default so that that message appears immediately whenever the user enters a value that is not in descending order.

Here is the .lss file

File Attachment:

File Name: limesurvey...5354.lss
File Size:22 KB


/Tom
Attachments:
The following user(s) said Thank You: darknico84

Please Log in to join the conversation.

More
5 years 7 months ago #76006 by darknico84
darknico84 replied the topic: Comparaison de deux valeurs numérique dans une même question
Thanks a lot for your answer, I guess I'll maybe have a look at 1.92 :)

Please Log in to join the conversation.

More
5 years 7 months ago #76009 by DenisChenu
DenisChenu replied the topic: Comparaison de deux valeurs numérique dans une même question
Salut,

Sinon, pour les codes .

Cela devrait être si je comprend bien:
'#answer51145X130X6212SQ001'
et
'#answer51145X130X6212SQ002'

Mais le mieux est de vérifier directement dans la source du questionnaire. FireBug sous FireFox par example pour t'y aider.

Denis

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).
An error happen ? Before make a new topic : remind the Debug mode .

Please Log in to join the conversation.

More
5 years 7 months ago - 5 years 7 months ago #76020 by darknico84
darknico84 replied the topic: Comparaison de deux valeurs numérique dans une même question
Effectivement, firebug me donne bien les valeurs que tu m'as indiquées par contre il y a un shmurtz dans le test car quoi que je mette il passe direct sur le else { return true; } . J'ai mis un alert dans cette section également pour vérifier par où passait le résultat du test.
<script type="text/javascript" charset="utf-8">
 $(document).ready(function() {
   $('#movenextbtn, #movesubmitbtn').click(function(){
     if ($('#answer51145X130X6212SQ001')>$('#answer51145X130X6212SQ002'))
     {
       alert ('Cela n\'est pas possible');
       return false;
     }
     else
     {
       alert ('Raoul!!');
       return true;
     }
   });
});
</script>

PS : j'ai inversé l'opérateur de test pour voir si cela change quelque chose.


En fait si j'essaye de balancer une de mes valeurs dans un alert j'obtiens [object Object]

alert ($('#answer51145X130X6212SQ002'));
Last Edit: 5 years 7 months ago by darknico84.

Please Log in to join the conversation.

More
5 years 7 months ago #76025 by DenisChenu
DenisChenu replied the topic: Comparaison de deux valeurs numérique dans une même question
Suis je bête .....

Il faut utiliser val() pour récupérer la valeur ....
Et en plus on va transformer en nombre pour être sûr ....
if (parseFloat($('#answer51145X130X6212SQ001').val())>parseFloat($('#answer51145X130X6212SQ002').val()))
Attention, le parsefloat n'est valide que pour les nombres avec le . comme séparateur, pas la ,.

Denis

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).
An error happen ? Before make a new topic : remind the Debug mode .

Please Log in to join the conversation.

More
5 years 7 months ago #76032 by darknico84
darknico84 replied the topic: Comparaison de deux valeurs numérique dans une même question
Merci grand Gourou Schnoulle, cela fonctionne parfaitement.

Please Log in to join the conversation.

More
5 years 7 months ago #76044 by darknico84
darknico84 replied the topic: Comparaison de deux valeurs numérique dans une même question
Si cela peut servir un jour, voici le code final avec en plus un test vérifiant que les deux champs sont bien remplis :
<script type="text/javascript" charset="utf-8">
 $(document).ready(function() {
   $('#movenextbtn, #movesubmitbtn').click(function(){
     if (parseFloat($('#answer51145X130X6212SQ001').val())<parseFloat($('#answer51145X130X6212SQ002').val()))
     {
       alert ('Le nombre A ne peut pas être supérieur au nombre B');
       return false;
     }
     else if (!parseFloat($('#answer51145X130X6212SQ002').val()) ^ !parseFloat($('#answer51145X130X6212SQ001').val()))
     {
      alert ('Vous n\'avez pas rempli tous les champs');
      return false;
     }
     else
     {
       return true;
     }
   });
});
</script>

Please Log in to join the conversation.

More
4 years 6 months ago #94646 by darknico84
darknico84 replied the topic: Comparaison de deux valeurs numérique dans une même question
Avé, j'ai un peu fait évoluer cette question qui comporte maintenant 3 entrées numériques.
<script type="text/javascript" charset="utf-8">
 $(document).ready(function() {
   $('#movenextbtn, #movesubmitbtn').click(function(){
     var total = $('#answer899625X139X7074SQ001').val()
     var input1 = $('#answer899625X139X7074SQ002').val()
     var input2 = $('#answer899625X139X7074SQ003').val()
     var somme = parseInt(input1) + parseInt(input2)
     if ( parseInt(total) < parseInt(somme) )
     {
       alert ('Attention il y a un problème);
	return false;
     }
     else
     {
       return true;
     }
   });
});
</script>

Ce javascript me permet de tester que la somme des deux input n'est pas supérieur au total.
Ma question est toujours facultative, toutefois je voudrais que les répondants remplissent soit tous les champs, soit aucun. Si dans mes paramètre de questions je met "nombre de réponse mini"=3, même si la réponse est facultative si l'interlocuteur ne met aucune réponse le questionnaire bloque.
J'ai essayé de rajouter un
elif ( total == "" && input1 == "" && input2 == "" )
    {
return true;
}

mais ce n'est pas concluant. Du coup j'ai supprimé le nombre de réponse mini à 3 et ai mis ceci mais ça ne fonctionne pas mieux

elif ( total == "" || input1 == "" || input2 == "" )
    {
alert ('Attention tous les champs ne sont pas remplis');
return false;
}

Y a t-il une manière simple/propre de dire en validation de question :
Si tous les champs sont remplis : OK (en plus de ce qui est déjà en place)
Si aucun des champs n'est rempli : OK
Sinon : KO

La solution est peut être simple mais j'ai l'impression de ne pas aller du tout dans la bonne direction.

Bon week end

Please Log in to join the conversation.

More
4 years 6 months ago #94647 by Nickko
Nickko replied the topic: Comparaison de deux valeurs numérique dans une même question
Là, faut vraiment que tu nous explique ce que tu veux faire vraiment, du point de vue fonctionnel, pas du point de vue technique parce que je n'ai rien compris.

Enfin, si j'ai compris ton code et ton problème mais pour te proposer une solution alternative ce n'est pas assez.

Je ne serais pas trop là aujourd'hui mais dès que je peux je passe ici et je te réponds.

Nickko

Nickko
Ergonome / Usability expert

Please Log in to join the conversation.

More
4 years 6 months ago #94648 by darknico84
darknico84 replied the topic: Comparaison de deux valeurs numérique dans une même question
En fait j'ai deux questions
- la première où la personne peut (si elle veut) répondre avec des chiffres précis : cette question est facultative
- si la personne ne désire pas répondre précisément à cette question, elle est renvoyée vers une deuxième question où là elle peut répondre avec un pourcentage.

Si l'interlocuteur répond correctement à la première question on zappe la deuxième et on passe à la suite. Mais si pour des raisons qui lui sont propre cette personne ne désire pas répondre précisément à la première question on passe à la deuxième.

Le problème qui se pose à moi est que sur la première question j'aimerai valider le fait que tous les champs sont correctement remplis : soit rien du tout (et on passe à la deuxième) soit tous les champs (et on zappe la deuxième). Dans tous les autres cas je voudrais remonter un alerte.

Est-ce plus clair ainsi ?

Merci :)

Please Log in to join the conversation.

More
4 years 6 months ago #94650 by DenisChenu
DenisChenu replied the topic: Comparaison de deux valeurs numérique dans une même question
count(that.QQ.NAOK) compte le nombre de réponses données à une question avec sous quetsion

is_empty({that.QQ.SGQA} test si toutes les sous questions de la question de code QQ sont vide.

Donc:
Equation de validation des sous question
count(that.QQ.NAOK)==0 or count(that.QQ.NAOK)==8
si 8 est le nombre de sous question

Je te laisse faire les conditions sur le même principe.

Denis

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand (or search sondages pro).
An error happen ? Before make a new topic : remind the Debug mode .

Please Log in to join the conversation.

More
4 years 6 months ago - 4 years 6 months ago #94668 by darknico84
darknico84 replied the topic: Comparaison de deux valeurs numérique dans une même question
Merci pour la syntaxe, je vais tester tout cela :)
Entre temps j'avais trouvé cette solution pas forcément propre mais qui a l'air de fonctionner
 <script type="text/javascript" charset="utf-8">
 $(document).ready(function() {
   $('#movenextbtn, #movesubmitbtn').click(function(){
     var total = $('#answer899625X139X7074SQ001').val()
     var input1 = $('#answer899625X139X7074SQ002').val()
     var input2 = $('#answer899625X139X7074SQ003').val()
     var somme = parseInt(input1) + parseInt(input2)
     if ( parseInt(total) < parseInt(somme) )
     {
       alert ('Erreur');
     }
     else if (!parseFloat($('#answer899625X139X7074SQ002').val()) ^ !parseFloat($('#answer899625X139X7074SQ001').val()))
     {
      alert ('Vous n\'avez pas rempli tous des champs');
      return false;
     }
     else if (!parseFloat($('#answer899625X139X7074SQ003').val()) ^ !parseFloat($('#answer899625X139X7074SQ001').val()))
     {
      alert ('Vous n\'avez pas rempli tous des champs');
      return false;
     }
     else if (!parseFloat($('#answer899625X139X7074SQ003').val()) ^ !parseFloat($('#answer899625X139X7074SQ002').val()))
     {
      alert ('Vous n\'avez pas rempli tous des champs');
      return false;
     }
     else
     {
       return true;
     }
   });
});
</script>

Nicolas
Last Edit: 4 years 6 months ago by darknico84.

Please Log in to join the conversation.

Moderators: Nickko

Start now!

Just create your account and start using Limesurvey today.

Register now