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

More
7 months 3 weeks ago - 7 months 3 weeks ago #152991 by marcfontanie
marcfontanie created the topic: Dernière case à cocher (Tableau Nombre) coche les autres
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: 7 months 3 weeks ago by marcfontanie.

Please Log in to join the conversation.

More
7 months 3 weeks ago #153003 by marcfontanie
marcfontanie replied the topic: Dernière case à cocher (Tableau Nombre) coche les autres
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);

Please Log in to join the conversation.

More
7 months 3 weeks ago #153006 by Nickko
Nickko replied the topic: Dernière case à cocher (Tableau Nombre) coche les autres
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.

Please Log in to join the conversation.

More
7 months 3 weeks ago #153009 by marcfontanie
marcfontanie replied the topic: Dernière case à cocher (Tableau Nombre) coche les autres
Si il y a une autre façon de faire, je suis preneur....!

Please Log in to join the conversation.

More
7 months 3 weeks ago #153014 by Nickko
Nickko replied the topic: Dernière case à cocher (Tableau Nombre) coche les autres
Je pense que tu es sur la bonne voix. Simplement ça dépasse mes compétences :-)

Nickko
Head of ergonomics, UX & UI.

Please Log in to join the conversation.

More
7 months 3 weeks ago #153028 by Ben_V
Ben_V replied the topic: Dernière case à cocher (Tableau Nombre) coche les autres
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)

Please Log in to join the conversation.

More
7 months 2 weeks ago - 7 months 2 weeks ago #153261 by marcfontanie
marcfontanie replied the topic: Dernière case à cocher (Tableau Nombre) coche les autres
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: 7 months 2 weeks ago by marcfontanie.

Please Log in to join the conversation.

More
7 months 2 weeks ago #153265 by marcfontanie
marcfontanie replied the topic: Dernière case à cocher (Tableau Nombre) coche les autres
La bonne syntaxe est :

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

ça marche !

Please Log in to join the conversation.

Moderators: Nickko

Start now!

Just create your account and start using Limesurvey today.

Register now
Join our Newsletter!