Welcome to the LimeSurvey Community Forum

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

Mehfachnennung mit Kommentar, fixen Antworten & ausgeblendeten Kommentarfeldern

  • Nessias
  • Nessias's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
2 years 5 months ago #221471 by Nessias
Hallo liebes Forum,

ich habe auf der Suche nach einer Lösung für mein Problem bereits Joffms Tutorial 2 gelesen und kann es nur wärmstens empfehlen. Echt super.
@Joffm: tausend Dank für die Arbeit!

Mein aktuellen Problme setzt sich aus mehreren Teilen zusammen:
1. Ich möchte eine Mehrfachantwort mit Kommantarfeldern erstellen.
2. Die Antwortmöglichkeiten sollen rotieren.
3. Eine Antwortmöglichkeit soll dabei aber immer am Ende stehen.
4. Und ich möchte einige Kommentarfelder ausbelnden.

Einzeln finde ich für jeden der 4 Teile eine Lösung, besonders mit Hilfe des o.g. Tutorials von Joffm ist das kein Problem.
Die Schwierigkeit besteht nun darin, die Kommentarfelder der ROTIERENDEN Antworten immer korrekt auszublenden.
Ich habe insgesamt 13 Antwortmöglichkeiten, wobei ich nur für das 2. und das 13. ein Kommentarfeld angezeigt bekommen möchte. Das 2. Item rotiert allerdings, das 13. soll stets auch an letzter Stelle stehen.

In Anlehnung an Joffms Tutorial habe ich nun folgendes in den Frage-Quelltext geschrieben:
---
$(document).on('ready pjax:scriptcomplete',function(){

// The number of answers to be fixed at the end of the list
var fixedAnswers = 13;

// Set this to "true" if you want "Other" to be fixed in the last position
var otherFixed = false;

// Identify this question
var qID = {9510};

// Find the number of answers
var ansCount = $('#question'+qID+' .answer-item').length;
if($('#question'+qID+' input[type="text"]').length > 0) {
ansCount = ansCount -1
}
console.log(ansCount);

// Place the last n answers created at the end of the list
var fixedIndex = fixedAnswers - 1;
for (var i=0; i<fixedAnswers; i++) {
var answer = $('input[id^="answer"][id$="X'+qID+(ansCount-fixedIndex)+'"]');
var answerItem = $(answer).closest('.answer-item');
var answersList = $(answer).closest('ul');
$(answersList).append(answerItem);
fixedIndex--;
}

// Handle "Other"
if(otherFixed == true && $('#question'+qID+' input[type="text"]').length > 0) {
var otherAnswer = $('#question'+qID+' input[type="text"]');
var otherAnswerItem = $(otherAnswer ).closest('.answer-item');
var otherAnswersList = $(otherAnswer ).closest('ul');
$(otherAnswersList).append(otherAnswerItem);
}
});
</script><script type="text/javascript" charset="utf-8">
$(document).ready(function() {
        var thisQuestion = $('#question{9510}');
// Remove some text inputs
$('.checkbox-text-item:checkbox-text-item:eq(0) .comment-item', thisQuestion).remove();
$('.checkbox-text-item:checkbox-text-item:eq(2) .comment-item', thisQuestion).remove();
$('.checkbox-text-item:checkbox-text-item:eq(3) .comment-item', thisQuestion).remove();
$('.checkbox-text-item:checkbox-text-item:eq(4) .comment-item', thisQuestion).remove();
$('.checkbox-text-item:checkbox-text-item:eq(5) .comment-item', thisQuestion).remove();
$('.checkbox-text-item:checkbox-text-item:eq(6) .comment-item', thisQuestion).remove();
$('.checkbox-text-item:checkbox-text-item:eq(7) .comment-item', thisQuestion).remove();
$('.checkbox-text-item:checkbox-text-item:eq(8) .comment-item', thisQuestion).remove();
$('.checkbox-text-item:checkbox-text-item:eq(9) .comment-item', thisQuestion).remove();
$('.checkbox-text-item:checkbox-text-item:eq(10) .comment-item', thisQuestion).remove();
$('.checkbox-text-item:checkbox-text-item:eq(11) .comment-item', thisQuestion).remove();
});
</script>
---

Der erste Teil zum Fixieren des letzen Items funktioniert super. Das Problem besteht darin, dass dich der zweite Teil (das Ausblenden der Kommentarfelder) auf die fixe Position des jeweiligen Items bezieht. D.h. Es werden auch immer nur die beiden Kommentarfelder an 2. und 13. Position angezeigt. Leider rotieren ja aber die Antwort-Items dazu, sodass es nicht mehr funktioniert.

Ich vermute, ich müsste "einfach" den Bezug, der jetzt noch '.checkbox-text-item:checkbox-text-item:eq(11) .comment-item' heißt, ändern, sodass er sich nicht auf die Position des Items, sondern auf den (Antwort-)Code des Items bezieht.
Und genau da stoße ich wieder einmal an meine Grenzen :-(

Ob mir da wohl jemand helfen kann?
Vielen lieben Dank schon einmal im Voraus.

Beste Grüße
Nessias
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 5 months ago #221485 by Joffm
Hallo,
bevor ich mich damit befasse,
dies ist nicht richtig:

1.
var fixedAnswers = 13;
Du willst doch nur eine Antwort am Ende fixieren und nicht alle 13.

2.
var qID = {9510};
Hier stand doch sicherlich {QID}: Und das bleibt auch dort; dieser Platzhalter wird doch durch die aktuelle FragenID ersetzt.

Um die ausgeblendeten Kommentare an die Teilfragencodes zu hängen, kannst Du einmal dies probieren.
Code:
<script type="text/javascript" charset="utf-8">
 
    $(document).ready(function() { 
        var thisQuestion = $('#question{QID}');
        // Remove some text inputs
        $('.form-control#answer{SGQ}SQ001comment').remove();
        $('.form-control#answer{SGQ}SQ003comment').remove();
        $('.form-control#answer{SGQ}SQ004comment').remove();
        $('.form-control#answer{SGQ}SQ005comment').remove();
        $('.form-control#answer{SGQ}SQ006comment').remove();
        $('.form-control#answer{SGQ}SQ007comment').remove();
        $('.form-control#answer{SGQ}SQ008comment').remove();
        $('.form-control#answer{SGQ}SQ009comment').remove();
        $('.form-control#answer{SGQ}SQ010comment').remove();
        $('.form-control#answer{SGQ}SQ011comment').remove();
        $('.form-control#answer{SGQ}SQ012comment').remove();
    });
    
</script>

Sonst würde ich einfach empfehlen, das Design zu ändern.
Einfach eine zusätzliche Frage mit zwei Textfeldern.

Hier im Beispiel sind noch die Klassen "no-question" und "no-bottom" im Spiel.
   

 


Volunteers are not paid.
Not because they are worthless, but because they are priceless
The following user(s) said Thank You: Nessias
The topic has been locked.
  • Nessias
  • Nessias's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
2 years 5 months ago #221513 by Nessias
Hallo Joffm,

und wieder einmal ganz herzlichen Dank für deine Hilfe.
Der Teil mit den ausgeblendeten Kommentaren funktioniert jetzt. Echt super!
Allerdings bleibt das 13. Item nicht unten stehen. Wenn ich var fixedAnswers = 1 setze, dann rotiert das letzte Item lustig mit, behält allerdings immer richtigerweise sein Kommentarfeld. setze ich die var fixedAnswers = 13, bleibt das letzte (und auch nur das letzte) Item auch an letzter Stelle stehen (deswegen hatte ich gestern auch die 13 und nicht die 1 genommen), allerdings hüpft dann das Kommentarfeld ohne ein dazugehöroges Item lusitg mit herum.

Viele Grüße
Nessias
The topic has been locked.
  • Nessias
  • Nessias's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
2 years 5 months ago #221514 by Nessias
Hab jetzt nochmal verschiedene Kombinationen probiert:
Egal, was ich bei 'var fixedAnswers' als Wert angebe, NUR wenn ich die 13 eintrage, bleibt auch das 13. Item unten stehen. Trage ich bspw. eine 9 oder 3 oder 5 ein, rotieren alle Items lustig weiter.

Vielleicht hilft das irgendwie weiter?

VG
Nessias
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 5 months ago #221520 by Joffm
Nee, tut es nicht unbedingt.
Ich bin nämlich der Meinung, dass dieses script nicht für "Mehrfach mit Kommentar" geeignet ist.
Steht ja auch nicht im Handbuch.
[url] manual.limesurvey.org/Workarounds:_Manip...meSurvey_version_3.x :[/url]

Zum ersten zeigt sich das "Nicht-Funktionieren" der Variablen "fixedAnswers".
Und dann noch der Code an sich: 
In der Programmierung besteht das Ganze aus zwei bootstrap-Spalten, die erste als "col-sm-4", die zweite als "col-sm-8" definiert.
Anscheinend wirkt das script nur auf die erste Spalte .

Kann man hier gut sehen.
Ich habe - mit der Lösung, die ich geschickt habe - alle Kommentare bis auf die zweite und fünfte Zeile entfernt.
Du siehst, die zweite Zeile ("Berta") ist korrekt, die fünfte bleibt aber da, wo dieses Item stand, bevor es vom script nach unten geschickt wurde.
 

Da kann ich Dir nicht helfen, da ich bis auf vielleicht 10 Befehle keine Ahnung von javascript habe.

Daher denke ich, ist die Lösung mit den zwei zusätzlichen Textfeldern nicht die schlechteste.

WH
Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The following user(s) said Thank You: Nessias
The topic has been locked.
  • Nessias
  • Nessias's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
2 years 5 months ago #221521 by Nessias
Alles klar. Ich danke Dir trotzdem sehr.
Hab die einfache Lösung umgesetzt (zusätzliche Textfelder), die funktioniert ja einwandfrei und tut ja auch, was sie soll. Die oben angestrebte Lösung wäre genaugenommen "nur" Kosmetik.
Auf jeden Fall vielen lieben Dank für Deine Mühe.

Beste Grüße
Nessias
The topic has been locked.
Moderators: Joffm

Lime-years ahead

Online-surveys for every purse and purpose