Welcome to the LimeSurvey Community Forum

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

Condition sur l'affichage du bouton Envoyer

  • fcazalas
  • fcazalas's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
2 weeks 4 days ago #260189 by fcazalas
Aidez-nous à vous aider et remplissez les cases appropriées :
Votre version de LimeSurvey : Version 6.5.2+240402
Votre propre serveur ou LimeSurvey Cloud : Community Edition hébergée sur mon propre serveur
Thème :
Bootstrap Vanilla
==================

Bonjour,

Je tente en vain de mettre en place une condition d'affichage de mon bouton "Envoyer" en fonction du respect d'une condition dans mon formulaire.
En clair, je voudrais que le bouton "Envoyer" soit désactivé tant que la valeur d'un champ n'est pas égal à la somme de plusieurs champs (tous ces champs sont des entrées numériques).

J'ai essayé de réutiliser un script glané sur un forum mais il m'empêcher d'aller plus loin que la première question à choix multiple. N'étant pas développeur, je patine et voulais savoir s'il y avait un moyen simple pour arriver à mes fins.
Est-ce que quelqu'un peut me guider ?
Merci pour votre aide !

Le script que j'essaie d'intégrer sur une question de type texte : J'ai pensé que je devais remplacer le sélecteur
Code:
#ls-button-submit
par
Code:
input[type="submit"]
pour cibler le bouton "Envoyer" mais ça ne fonctionne pas dans les deux cas ;(

$(document).ready(function() {
    // Fonction pour désactiver le bouton Envoyer
    function disableSubmitButton() {
        $('input[type="submit"]').prop('disabled', true); // Désactive le bouton Envoyer
    }

    // Fonction pour activer le bouton Envoyer
    function enableSubmitButton() {
        $('input[type="submit"]').prop('disabled', false); // Active le bouton Envoyer
    }

    // Fonction pour vérifier si la condition est respectée
    function checkCondition() {
        var sum = 0;
        // Ajoute la valeur de chaque question à la somme
        sum += parseInt($('#question{G01Q02_SQ001.shown} input[type="text"]').val() || 0);
        sum += parseInt($('#question{G01Q02_SQ002.shown} input[type="text"]').val() || 0);
        sum += parseInt($('#question{G01Q02_SQ003.shown} input[type="text"]').val() || 0);
        sum += parseInt($('#question{G01Q02_SQ004.shown} input[type="text"]').val() || 0);
        sum += parseInt($('#question{G01Q02_SQ005.shown} input[type="text"]').val() || 0);
        sum += parseInt($('#question{G01Q02_SQ006.shown} input[type="text"]').val() || 0);
        sum += parseInt($('#question{G01Q03.shown} input[type="text"]').val() || 0);
        sum += parseInt($('#question{G01Q04.shown} input[type="text"]').val() || 0);

        var attributeValue = parseInt('{TOKEN:ATTRIBUTE_4}'); // Obtient la valeur de l'attribut ATTRIBUTE_4

        // Vérifie si la condition est respectée
        if (sum === attributeValue) {
            enableSubmitButton(); // Active le bouton Envoyer
        } else {
            disableSubmitButton(); // Désactive le bouton Envoyer
        }
    }

    // Vérifie la condition lorsque la réponse à une question change
    $('input[type="text"]').on('input', checkCondition);

    // Vérifie la condition par défaut
    setTimeout(checkCondition, 100);
});



 

Please Log in to join the conversation.

  • fcazalas
  • fcazalas's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
1 week 6 days ago #260450 by fcazalas
Replied by fcazalas on topic Condition sur l'affichage du bouton Envoyer
J'ai fini par réussir à faire ce que je voulais. Je vous mets le code pour info :

$(document).ready(function() {
// Function to calculate the sum of questions' answers
function calculateSum() {
var sum = 0;
// Utiliser des sélecteurs d'attribut CSS pour cibler les champs de réponse par leur ID
sum += parseIntegerValue($('#answer620000X21X488SQ001').val());
sum += parseIntegerValue($('#answer620000X21X488SQ002').val());
sum += parseIntegerValue($('#answer620000X21X488SQ003').val());
sum += parseIntegerValue($('#answer620000X21X488SQ004').val());
sum += parseIntegerValue($('#answer620000X21X488SQ005').val());
sum += parseIntegerValue($('#answer620000X21X488SQ006').val());
sum += parseIntegerValue($('#answer620000X21X504').val());
sum += parseIntegerValue($('#answer620000X21X505').val());
return sum;
}

// Function to parse integer value from string or return 0 if empty or non-numeric
function parseIntegerValue(value) {
return value && !isNaN(value) ? parseFloat(value) : 0;
}

// Function to check if conditions are met and enable/disable send button accordingly
function checkConditions() {
var sum = calculateSum();
var attributeValue = parseFloat('{TOKEN:ATTRIBUTE_4}');
// Arrondir les valeurs à deux décimales
sum = Math.round(sum * 100) / 100;
attributeValue = Math.round(attributeValue * 100) / 100;
// Comparer les valeurs arrondies
if (sum === attributeValue) {
$('#ls-button-submit').prop('disabled', false); // Activer le bouton d'envoi
} else {
$('#ls-button-submit').prop('disabled', true); // Désactiver le bouton d'envoi
}

// Afficher l'état du bouton dans la console
console.log("État du bouton d'envoi:", $('#ls-button-submit').prop('disabled') ? "Désactivé" : "Activé");
}

// Appeler checkConditions() au chargement de la page
checkConditions();

// Appeler checkConditions() à chaque modification des valeurs des champs
$('input').on('input', function() {
checkConditions();
});
});
The following user(s) said Thank You: DenisChenu

Please Log in to join the conversation.

  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
1 week 14 hours ago #260852 by DenisChenu
Replied by DenisChenu on topic Condition sur l'affichage du bouton Envoyer
Ce que j'ai déjà fait, c'est ajouter une question affichage de texte dans chaque groupe contenant le bouton Suivant.
Et supprimer tout le code HTML de navigator.twig

Ensuite : tu utilises les conditions pour afficher ou non cette question.

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
The following user(s) said Thank You: fcazalas

Please Log in to join the conversation.

Moderators: Nickko

Lime-years ahead

Online-surveys for every purse and purpose