Welcome to the LimeSurvey Community Forum

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

Dernière case à cocher (Tableau Nombre) coche les autres

  • marcfontanie
  • marcfontanie's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
6 years 10 months ago - 6 years 10 months ago #152991 by marcfontanie
Bonjour,

(Après pas mal de recherches préalables, je n'arrive pas à résoudre mon problème...alors merci de votre aide).

En fait je veux faire l'inverse du "Last Option In Array (Numbers) (Checkboxes) Row Excludes All Others"
Autrement dit, quand je clique la dernière option de la ligne cela "checked" toutes les autres cases de la ligne.
J'ai repris le code proposé et j'ai changé les lignes suivantes pour qu'elles fassent le job :
// Uncheck the appropriate boxes in a row
if ($(thisCell).hasClass('exlusive-item')) {
$('.normal-item input[type="checkbox"]', thisRow).attr('checked', true);
}
else {
$('.exlusive-item input[type="checkbox"]', thisRow).attr('checked', false);
}

Quand je clique sur la dernière case à cocher : ça marche, toutes les cases de la ligne sont cochées (youpi).
Si je clique à présent sur une des premières cases, la dernière se décoche (youpi).
Si je reclique sur la dernière, elle se coche mais les autres ne se cochent pas (pas youpi).
Si je reclique sur une des premières cases, la dernière se décoche toujours.

En conclusion :
La fonction ajoutée à la dernière case à cocher ne fonctionne qu'une fois...
Alors que la fonction ajoutée aux autres cases fonctionne à chaque fois..

Je remets ci-dessous le code complet :
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
// Call the exclude function using question ID
excludeOpt({QID});
});

// A function to make the last option in each array row exclusive
function excludeOpt (qID) {

var thisQuestion = $('#question'+qID)

// Add some classes to the checkbox cells
$('td.checkbox-item', thisQuestion).addClass('normal-item');
$('tr.subquestion-list', thisQuestion).each(function(i) {
$('.normal-item:last', this).removeClass('normal-item').addClass('exlusive-item')
});

// A listener on the checkboxes
$('input[type="checkbox"]', thisQuestion).on('change', function (event) {
handleExclusive($(this).closest('td'));
});

function handleExclusive(thisCell) {

var thisRow = $(thisCell).closest('tr');

// Uncheck the appropriate boxes in a row
if ($(thisCell).hasClass('exlusive-item')) {

$('.normal-item input[type="checkbox"]', thisRow).attr('checked', true);
}
else {
$('.exlusive-item input[type="checkbox"]', thisRow).attr('checked', false);
}

// Check conditions (relevance)
$('td.checkbox-item', thisRow).each(function(i) {
var thisValue = '';
if($('input[type="checkbox"]', this).is(':checked')) {
thisValue = 1;
}
var thisSGQA = $('input[type="checkbox"]', this).attr('id').replace(/cbox_/, '');


$('input[type="hidden"]', this).attr('value', thisValue);
fixnum_checkconditions(thisValue, thisSGQA, 'hidden');
});
}
}
</script>
Last edit: 6 years 10 months ago by marcfontanie.
The topic has been locked.
  • marcfontanie
  • marcfontanie's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
6 years 10 months ago #153003 by marcfontanie
En fait je précise après moultes tests.
La fonction fonctionne bien plusieurs fois de suite (un alert("coucou");) fonctionne à chaque fois.
MAIS, une case à cocher de la ligne qui a été cochée et/ou décochée manuellement une fois n'applique plus la fonction : $('.normal-item input[type="checkbox"]', thisRow).attr('checked', true);
The topic has been locked.
  • Nickko
  • Nickko's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
6 years 10 months ago #153006 by Nickko
Avec Jquery, je ne t'aiderais pas beaucoup, il faudrait attendre le passage de Denis par exemple ou peut-être Ben pour ne citer qu'eux.

Je sais qu'ils sont experts en Jquery.

Nickko
Head of ergonomics, UX & UI.
The topic has been locked.
  • marcfontanie
  • marcfontanie's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
6 years 10 months ago #153009 by marcfontanie
Si il y a une autre façon de faire, je suis preneur....!
The topic has been locked.
  • Nickko
  • Nickko's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
6 years 10 months ago #153014 by Nickko
Je pense que tu es sur la bonne voix. Simplement ça dépasse mes compétences :-)

Nickko
Head of ergonomics, UX & UI.
The topic has been locked.
More
6 years 10 months ago #153028 by Ben_V
Salut, ce n'est pas strictement ce que tu recherches, mais si tu n'as pas trop d'options de réponses tu peux peut-être tout simplement utiliser la fonction:

"Auto-check exclusive option if all others are checked (exclude_all_others_auto)"

manual.limesurvey.org/Question_type_-_Mu...e_all_others_auto.29

Benoît

EM Variables => bit.ly/1TKQyNu | EM Roadmap => bit.ly/1UTrOB4
Last Releases => 2.6x.x goo.gl/ztWfIV | 2.06/2.6.x => bit.ly/1Qv44A1
Demo Surveys => goo.gl/HuR6Xe (already included in /docs/demosurveys)
The topic has been locked.
  • marcfontanie
  • marcfontanie's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
6 years 10 months ago - 6 years 10 months ago #153261 by marcfontanie
Merci pour vos propositions, même si elles ne collent pas tout à fait au besoin.
Je m'en sors en rendant "disabled" ma dernière case quand on clique sur une des cases des colonnes précédentes.
C'est pas le top, mais c'est mieux que rien.

Je bloque sur un autre cas :
dans mon tableau à 4 colonnes et 8 lignes, je voudrais cacher une case à cocher en particulier.

En l'occurence, la case correspondant à la sous-question SQ008_SQ003

J'ai tenté un :

document.getElementById("cbox_741892X106X998SQ008_SQ003").style.display='none');
ou
document.getElementById("cbox_741892X106X998SQ008_SQ003").attr.disabled='true');

Mais ça ne marche pas...

Merci de vos lumières...
Last edit: 6 years 10 months ago by marcfontanie.
The topic has been locked.
  • marcfontanie
  • marcfontanie's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
6 years 10 months ago #153265 by marcfontanie
La bonne syntaxe est :

$('input[id^="cbox_741892X106X998SQ008_SQ003"]').attr('disabled', true);

ça marche !
The topic has been locked.
Moderators: Nickko

Lime-years ahead

Online-surveys for every purse and purpose