Check out the LimeSurvey source code on GitHub!
Welcome, Guest
Username: Password:
  • Page:
  • 1
  • 2

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

Comparaison de deux valeurs numérique dans une même question 4 years 5 months ago #75958

  • darknico84
  • darknico84's Avatar
  • Offline
  • Senior Lime
  • Posts: 60
  • Karma: 0
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
The administrator has disabled public write access.

Comparaison de deux valeurs numérique dans une même question 4 years 5 months ago #75961

  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • Moderator Lime
  • Posts: 9298
  • Thank you received: 1330
  • Karma: 386
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 developpement are on my free time (Say thanks ?).
A bug not reported is a bug not corrected. | Please, read the documentation | La doc en français à besoin de vous
Last Edit: 4 years 5 months ago by DenisChenu.
The administrator has disabled public write access.
The following user(s) said Thank You: darknico84

Comparaison de deux valeurs numérique dans une même question 4 years 5 months ago #75981

  • darknico84
  • darknico84's Avatar
  • Offline
  • Senior Lime
  • Posts: 60
  • Karma: 0
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: 4 years 5 months ago by darknico84.
The administrator has disabled public write access.

Comparaison de deux valeurs numérique dans une même question 4 years 5 months ago #76001

  • TMSWhite
  • TMSWhite's Avatar
  • Offline
  • LimeSurvey Team
  • Posts: 758
  • Thank you received: 83
  • Karma: 37
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
The administrator has disabled public write access.
The following user(s) said Thank You: darknico84

Comparaison de deux valeurs numérique dans une même question 4 years 5 months ago #76006

  • darknico84
  • darknico84's Avatar
  • Offline
  • Senior Lime
  • Posts: 60
  • Karma: 0
Thanks a lot for your answer, I guess I'll maybe have a look at 1.92 :)
The administrator has disabled public write access.

Comparaison de deux valeurs numérique dans une même question 4 years 5 months ago #76009

  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • Moderator Lime
  • Posts: 9298
  • Thank you received: 1330
  • Karma: 386
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 developpement are on my free time (Say thanks ?).
A bug not reported is a bug not corrected. | Please, read the documentation | La doc en français à besoin de vous
The administrator has disabled public write access.

Comparaison de deux valeurs numérique dans une même question 4 years 5 months ago #76020

  • darknico84
  • darknico84's Avatar
  • Offline
  • Senior Lime
  • Posts: 60
  • Karma: 0
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: 4 years 5 months ago by darknico84.
The administrator has disabled public write access.

Comparaison de deux valeurs numérique dans une même question 4 years 5 months ago #76025

  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • Moderator Lime
  • Posts: 9298
  • Thank you received: 1330
  • Karma: 386
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 developpement are on my free time (Say thanks ?).
A bug not reported is a bug not corrected. | Please, read the documentation | La doc en français à besoin de vous
The administrator has disabled public write access.

Comparaison de deux valeurs numérique dans une même question 4 years 5 months ago #76032

  • darknico84
  • darknico84's Avatar
  • Offline
  • Senior Lime
  • Posts: 60
  • Karma: 0
Merci grand Gourou Schnoulle, cela fonctionne parfaitement.
The administrator has disabled public write access.

Comparaison de deux valeurs numérique dans une même question 4 years 5 months ago #76044

  • darknico84
  • darknico84's Avatar
  • Offline
  • Senior Lime
  • Posts: 60
  • Karma: 0
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>
The administrator has disabled public write access.

Comparaison de deux valeurs numérique dans une même question 3 years 4 months ago #94646

  • darknico84
  • darknico84's Avatar
  • Offline
  • Senior Lime
  • Posts: 60
  • Karma: 0
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
The administrator has disabled public write access.

Comparaison de deux valeurs numérique dans une même question 3 years 4 months ago #94647

  • Nickko
  • Nickko's Avatar
  • Offline
  • LimeSurvey Team
  • Posts: 2789
  • Thank you received: 365
  • Karma: 78
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
The administrator has disabled public write access.

Comparaison de deux valeurs numérique dans une même question 3 years 4 months ago #94648

  • darknico84
  • darknico84's Avatar
  • Offline
  • Senior Lime
  • Posts: 60
  • Karma: 0
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 :)
The administrator has disabled public write access.

Comparaison de deux valeurs numérique dans une même question 3 years 4 months ago #94650

  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • Moderator Lime
  • Posts: 9298
  • Thank you received: 1330
  • Karma: 386
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 developpement are on my free time (Say thanks ?).
A bug not reported is a bug not corrected. | Please, read the documentation | La doc en français à besoin de vous
The administrator has disabled public write access.

Comparaison de deux valeurs numérique dans une même question 3 years 4 months ago #94668

  • darknico84
  • darknico84's Avatar
  • Offline
  • Senior Lime
  • Posts: 60
  • Karma: 0
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: 3 years 4 months ago by darknico84.
The administrator has disabled public write access.
  • Page:
  • 1
  • 2
Moderators: Nickko
Time to create page: 0.326 seconds
Imprint                   Data Protection Statement                  Revocation information and revocation form