filtre de tableau sur option de réponse

More
4 years 6 months ago #85182 by loii
Bonjour,
A partir d'un tableau avec trois options de réponse ("je connais", "je connais de nom", "je en connais pas") et plusieurs sous questions, je cherche à faire un filtre de tableau qui ne m'affiche que les sous-questions de l'option de réponse 1 ("je connais").
Si je rentre dans le champ "filtre de tableau" le code de la question, limesurvey m'affiche en toute logique les sous-questions dès qu'une des trois options de réponse est cochée; j'ai tenté plein de solutions du type Qcode_A1 ou Qcode = "A1", etc. En vain.
Est-ce possible ? Quel serait donc la bonne écriture ?
Merci.

Please Log in to join the conversation.

More
4 years 6 months ago - 4 years 6 months ago #85197 by DenisChenu
Salut,

Je ne pense pas qu'il y ai de solution intégrée à LimeSurvey. Il est possible de masquer les lignes en javascript soit sur la même page soit sur des pages différentes.

Tes questions sont sur la même page ou une page différente ?

Denis
PS: peut être quelques idées ici : www.limesurvey.org/en/forum/can-i-do-thi...er-defined-condition

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).
Last Edit: 4 years 6 months ago by DenisChenu.

Please Log in to join the conversation.

More
4 years 6 months ago #85214 by loii
Merci Denis !
J'ai en effet abandonné la solution du filtre de tableau pour retenir l'idée du javascript que tu proposais. Après quelques heures de bidouilles (je suis vraiment pas à l'aise en js), j'ai réussit à sortir un code qui fonctionne mais qui est très capricieux ! Je n'arrive pas à comprendre pourquoi. Quand je clique sur un bouton radio de sous question de la question 1, il ne me fait pas apparaitre la sous-question équivalente de la question 2 à chaque coup... Une idée sur ce genre de comportements de js (ou jquery) susceptible ?
Le code :
<script type='text/javascript'>
$(document).ready(function() {
	$('#javatbd37367X90X2262S1').parent('.question').find('.radio').click(function(){
		var SubQ = $(this).attr("name").substr(-2);
		if(($(this).val() == "A1")||($(this).val() == "A2")){
			$("#"+"javatbd{SGQ}"+SubQ).hide();
			$("#answer{SGQ}"+SubQ).val("");
		}else{
			$("#"+"javatbd{SGQ}"+SubQ).show();
		}
	});
});
</script>
Merci !
Eloi

Please Log in to join the conversation.

More
4 years 6 months ago #85240 by DenisChenu
Salut,

Si tu n'est pas à l'aise avec javascript, il vaut mieux utiliser directement les codes ... plutot que d'essayer de manipuler de façon plus élégantes.

Sinon, ici , tu ne test que le click mais pas le résultat du clic.
If ($(this).is(':checked'));

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).

Please Log in to join the conversation.

More
4 years 6 months ago #85247 by loii
bonjour,

je n'arrive toujours pas à résoudre mon soucis de code capricieux qui ne réagit pas à chaque clic.

Sinon, ici , tu ne test que le click mais pas le résultat du clic.
If ($(this).is(':checked'));

J'ai pas tout à fait saisi où il fallait mettre ce "If", je l'ai donc tenté à différents endroits, mais en vain.
Sinon l'objectif est de poser les deux tableaux sur la même page, d'où une modif du code proposé plus haut.

Please Log in to join the conversation.

More
4 years 6 months ago #85252 by DenisChenu
Non, pas exactement, mais je n'ai pas repris l'ensemble.

Ici : tu test uniquement quelle case est cliqué, mais il faut aussi et surtout tester la case cochée.

Je verrais plutot:
$("#question2262 .question tbody input.radio").click(function(){
nom=$(this).name();
subq=nom.substr(-2);
// Trouve la case cochée
valcheck=$("input[name='"+nom+"']:checked).val();
if(valcheck="A1" || valcheck=="A2"){
			$("#javatbd{SGQ}"+SubQ).hide();
			$("#answer{SGQ}"+SubQ).val("");
}else{
			$("#javatbd{SGQ}"+SubQ).show();
}
});

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).

Please Log in to join the conversation.

More
4 years 6 months ago #85263 by loii
Okai,
cette fois-ci j'y suis. C'est pas de la dentelle mais ça fonctionne.
Le problème de "caprice" de js était une histoire de clic dans la case du bouton radio (limesurvey prenant en compte le clic dans la case mais hors bouton, et pas mon code).
Merci Denis. Je suis reparti de ton code plus conventionnel, y ai réglé le petit problème de clic pas pile-poile sur le bouton radio, et j'ai rajouté de quoi cacher la question 2, tant qu'elle n'a pas de sous-question à afficher.
Voici donc le code final :
<script type='text/javascript'>
$(document).ready(function() {
	$("#question{self.qid}").hide();
	$("#question{self.qid} tbody tr tbody").hide();
	$("#question2262 .question tbody td").click(function(){ // numero de la question du tableau 1 a renseigner
		nom=$(this).find("input.radio").attr("name");
		subq=nom.substr(-3); // les sous-questions doivent etre a 3 caracteres (ex:S01), identiques sur les 2 tableaux
		valcheck=$(this).find("input.radio").val();
		if(valcheck == "A1" || valcheck == "A2"){ // renseigner les codes des options de reponse validant la question a destination du tableau 2
			$("#question{self.qid}:hidden").show();
			$("#javatbd{SGQ}"+subq).show();
		}else{
			$("#javatbd{SGQ}"+subq).hide();
			$("#answer{SGQ}"+subq).val("");
		}
	});
});
</script>

Please Log in to join the conversation.

More
4 years 6 months ago #85274 by DenisChenu
Salut,

Ah oui, le clic sur la cellule du tableau à prendre en compte :).
Ca marche si la personne clic 2 fois sur la case ?
Plutot que
valcheck=$(this).find("input.radio").val();

Je verrais plutôt
valcheck=$(this).closest('tr').find("input.radio:checked").val();

Non ?

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).

Please Log in to join the conversation.

More
4 years 6 months ago #85281 by loii
Yes !
valcheck=$(this).closest('tr').find("input.radio:checked").val();
fonctionne et est plus propre (closest, je ne connaissais pas, belle découverte !)
Concernant les 2 clics, oui, ça fonctionnait. Le premier prenait en compte le bouton checked précédent donc le second fonctionnait (il avait un clic de retard en quelques sortes...)
Merci !
Je remets le code avec la petite modif, si ça peut en intéresser d'autres...
<script type='text/javascript'>
$(document).ready(function() {
	$("#question{self.qid}").hide();
	$("#question{self.qid} tbody tr tbody").hide();
	$("#question2262 .question tbody td").click(function(){ // numero de la question du tableau 1 a renseigner
		nom=$(this).find("input.radio").attr("name");
		subq=nom.substr(-3); // les sous-questions doivent etre a 3 caracteres (ex:S01), identiques sur les 2 tableaux
		valcheck=$(this).closest('tr').find("input.radio:checked").val();
		if(valcheck == "A1" || valcheck == "A2"){ // renseigner les codes des options de reponse validant la question a destination du tableau 2
			$("#question{self.qid}:hidden").show();
			$("#javatbd{SGQ}"+subq).show();
		}else{
			$("#javatbd{SGQ}"+subq).hide();
			$("#answer{SGQ}"+subq).val("");
		}
	});
});
</script>

Please Log in to join the conversation.

Moderators: Nickko