diff --git a/resources/assets/javascripts/lib/questionnaire.js b/resources/assets/javascripts/lib/questionnaire.js
index 199a98affeaa2030ba810284d43c5b5d1bb26b00..56da337f398f385b9ff7707bf9495388d937d5e2 100644
--- a/resources/assets/javascripts/lib/questionnaire.js
+++ b/resources/assets/javascripts/lib/questionnaire.js
@@ -1,6 +1,8 @@
 import { $gettext } from '../lib/gettext.js';
 
 const Questionnaire = {
+    delayedQueue: [],
+    delayedInterval: null,
     lastUpdate: null,
     initialize() {
         STUDIP.JSUpdater.register(
@@ -198,7 +200,42 @@ const Questionnaire = {
         downer.hide().fadeIn();
         thisquestion.hide().fadeIn();
     },
+    addDelayedInit(el, data, isAjax, isMultiple) {
+        this.delayedQueue.push({
+            el,
+            data,
+            isAjax,
+            isMultiple,
+            $el: $(el), // jQueried element (for performance reasons
+            visible: false
+        });
+
+        if (this.delayedInterval === null) {
+            this.delayedInterval = setInterval(() => {
+                this.delayedQueue.forEach(item => {
+                    if (item.$el.is(':visible')) {
+                        this.initVoteEvaluation(item.el, item.data, item.isAjax, item.isMultiple);
+                        item.visible = true;
+                    }
+                });
+
+                this.delayedQueue = this.delayedQueue.filter(item => !item.visible);
+                if (this.delayedQueue.length === 0) {
+                    clearInterval(this.delayedInterval);
+                }
+            }, 100);
+        }
+    },
     initVoteEvaluation: async function (el, data, isAjax, isMultiple) {
+        if ($(el).is(':not(:visible)')) {
+            if (!$(el).data('vote-evaluation-delayed')) {
+                this.addDelayedInit(el, data, isAjax, isMultiple);
+
+                $(el).data('vote-evaluation-delayed', true);
+            }
+
+            return;
+        }
 
         const Chartist = await STUDIP.loadChunk('chartist');