- Posts: 30
- Thank you received: 1
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
- Topic Author
- Offline
- Junior Member
Less
More
2 weeks 6 days ago #260189
by fcazalas
Condition sur l'affichage du bouton Envoyer was created 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
par
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);
});
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
Code:
input[type="submit"]
$(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
- Topic Author
- Offline
- Junior Member
Less
More
- Posts: 30
- Thank you received: 1
2 weeks 1 day 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();
});
});
$(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
- Offline
- LimeSurvey Community Team
Less
More
- Posts: 13667
- Thank you received: 2496
1 week 2 days ago #260852
by DenisChenu
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.
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.
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