Welcome to the LimeSurvey Community Forum

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

Zusätzliche Spalten in Matrizen Kapitel 4

More
2 years 4 days ago #249843 by ToniLeuphana
Bitte helfen Sie uns, Ihnen zu helfen und füllen Sie folgende Felder aus:
Ihre LimeSurvey-Version:  LimeSurvey Cloud   Version 6.2.4
Eigener Server oder LimeSurvey-Cloud: Cloud
==================
Moin Joffm,
wir hatten schon über die Erstellung einer Matrix mit zwei Spalten und mehreren Zeilen gesprochen. In die ersten Spalten soll jeweils ein kurzer freier Text und in der zweiten Spalte soll dieser Text auf einer Skala von 1-7 bewertet werden. Ich habe das Skript aus deinem Matrizen Tutorial Kapitel 4 genommen, weiß jetzt allerdings nicht genau wie ich weiter machen soll. -> Siehe Anhang
 

File Attachment:

File Name: Matrixtest.lss
File Size:31.3 KB

Please Log in to join the conversation.

More
2 years 4 days ago #249846 by Joffm
Hallo, Toni,
zunächst das GIGO-Problem (auf deutsch: Mist rein, Mist raus)
Du schriebst, Du habest das Tutorial benutzt.
Aber:
a. Dort steht
Nach der Matrix-Frage wird so viele Fragen vom Typ „Mehrfache kurze Texte“ erzeugt wie man Textfelder pro Zeile benötigt (mit derselben Anzahl Teilfragen wie die Matrixfrage).
Dies würde bedeuten: 1 Frage "mehrfache kurze Texte" mit 10 Teilfragen. Du benutzt aber eine Frage vom Typ "langer Text".

b. Im script steht diese Zeile
var qMultiText = qArray.nextAll('.multiple-short-txt:eq(0)');
D.h. der "multi-text" kommt NACH der Matrix. Bei Dir ist diese Deine Textfrage aber davor.

c. Wieso hast Du denn den Platzhalter {QID} geändert?
var qArrayID = {C1};
Erstens werden diese Platzhalter benutzt, damit man sie gerade nicht ändern muss; {QID} enthält immer die aktuelle FragenID, {SID} immer die SurveyID, usw.
Und zweitens hast Du gar nicht die FragenID dort eingetragen, sondern den Fragencode.
Die ID wäre diese
 
Also, lass das in Zukunft in Ruhe.

Das also dazu.

Nun aber zum eigentlichen:
Sieht der Text des scriptes nach dem Speichern bei Dir auch so aus?
 
Dann hast Du wohl ganz einfach keine Rechte javascript zu benutzen.
Du schriebst, Du benutzt die bei der LimeSurvey GmbH gehostete Version. Wird dort schon 6.2.4. angeboten? Weil, meine dort gehostete Test-Version ist noch 5.6.31.
Oder doch eine Uni-Geschichte?
Bei sehr vielen, den meisten Unis wird es den Studenten nicht erlaubt, javascript zu nutzen. 

Ich werde heute später das Ding wieder zurechtbiegen und schicken.
Aber: Hast Du eigentlich die Beispiel-Datei des Tutorials einmal importiert?
Dort hättest Du ja schnell sehen können, ob javascript bei Dir erlaubt ist oder nicht.

Bis später

Joffm

 
​​​​​​​


 

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
2 years 3 days ago #249908 by ToniLeuphana
Ich habe bisher tatsächlich einfach nur die kostenlose Cloud Version genutzt, die auf dem neuesten Stand war. Es kann natürlich aber sein, dass ich dort keine Java Rechte habe. Nun habe ich mich mal über die Uni angemeldet. Dort habe ich diese Version LimeSurvey Community Edition
Version 3.28.63, Hier sollte ich auch für alles Rechte haben.

Also für mein Beispiel hilft es nix mich an dem Kapitel zu orientieren, da es auf englisch ist und auch nicht meinem Format entspricht, sehe ich das richtig?

Please Log in to join the conversation.

More
2 years 3 days ago #249909 by holch
Du sollst es ja nicht einfach kopieren, sondern installieren, anschauen, verstehen und dann auf dieser Basis deine Umfrage so bauen, dass es für dich passt, egal in welcher Sprache.

Und wenn du Umfrage importierst und testest wirst du vermutlich auch sehen, ob die Javascript nutzen kannst oder nicht.

Help us to help you!
  • Provide your LS version and where it is installed (own server, uni/employer, SaaS hosting, etc.).
  • Always provide a LSS file (not LSQ or LSG).
Note: I answer at this forum in my spare time, I'm not a LimeSurvey GmbH employee.

Please Log in to join the conversation.

More
2 years 3 days ago #249910 by Joffm
Hallo, Toni
da waren ja noch mehr Klöpse.
Nachdem ich das script ein wenig audgedröselt hatte, sah ich noch dies.
1. 
var qArray = $('Nennen Sie Lebensmittel mit einem niedrigen ... halten '+qArrayID);
statt
var qArray = $('#question'+qArrayID);
Auch hier wieder "#question" ist eine ganz bestimmte ID im HTML-Code, wie auch ".question" eine bestimmte Klasse wäre.
Und dies ist weideder etwas ganz anderes als die property ".question" in ExpressionScript.
Lies Dir dies einmal etwas intensiver durch, z.B. bei "selfHTML" oder auch "W3Schools".
Solche Basics sollte man wenigstens verstehen, wenn man hier in LimeSurvey mit "HTML", "css" und "javascript" herumfummeln möchte.

2.
$('.inserted-column-label, qArray).css('width','30%'); 
statt
$('.inserted-column-label', qArray).css('width','30%');
Gut, man sieht ihn schlecht, den fehlenden Apostroph hinter "label"

Okay, im Falle, dass Du javascript benutzen kannst: Ich sehe keine Probleme mit einem korrekten Script und korrekten Fragetypen
Code:
<script type="text/javascript" data-author="Tony Partner">
 
  $(document).on('ready pjax:scriptcomplete',function(){
 
    // Identify the questions
    var qArrayID = {QID};
    var qArray = $('#question'+qArrayID);
    var qMultiText = qArray.nextAll('.multiple-short-txt:eq(0)');
 
    // Hide the multi-short-text question
    $(qMultiText).hide();
 
    // Remove the core column widths
    $('table.questions-list col:not(.col-answers)', qArray).css('width', 'auto');
 
    // Insert the header cells
    $('table.questions-list thead td:eq(0)', qArray).after('<th class="answer-text inserted-column-label" /></th>');
    $('.inserted-column-label', qArray).css('width','25%');
 
    // Insert the answer row cells
    $('tr.answers-list', qArray).each(function(i) {
      $('.answertext', this).after('<td class="answer-item text-item"></td>');
    });
 
    // Load the column label for the text inputs
    $('.inserted-column-label:eq(0)', qArray).text($('.ls-label-question', qMultiText).text());
 
    // Loop through the multi-short-text sub-questions
    $('li.answer-item', qMultiText).each(function(i) {
      // Move the text inputs into the array
      $('input[type="text"]', this).appendTo($('tr.answers-list:eq('+i+') .text-item', qArray));
    });
  });
</script>
 

 

File Attachment:

File Name: limesurvey...1411.lss
File Size:46.05 KB


Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
2 years 3 days ago #249912 by ToniLeuphana
Das Script und die Matrix sehen super aus. Leider ist die Datei nicht mit der Version 3.28.63 kompatibel. Ich habe auch leider nur über die Uni gelernt mit R umzugehen, bei Java bin ich noch ein kompletter Laie. Wäre es möglich die lss-Datei noch für meine Version zu importieren?

Vielen Lieben Dank und beste Grüße
Toni

Please Log in to join the conversation.

More
2 years 3 days ago #249914 by holch
idealerweise nie Versionen mixen, blickt ja keiner mehr durch. Bringt ja nix, wenn das Teil in der LS6 läuft, du aber die LS3 der Uni verwenden musst. Also immer auch auf der Version testen, auf der es am Ende produktiv eingesetzt werden soll.

Help us to help you!
  • Provide your LS version and where it is installed (own server, uni/employer, SaaS hosting, etc.).
  • Always provide a LSS file (not LSQ or LSG).
Note: I answer at this forum in my spare time, I'm not a LimeSurvey GmbH employee.

Please Log in to join the conversation.

More
2 years 3 days ago - 2 years 3 days ago #249916 by Joffm
Naja, Du hast gesagt, es ist Version 6.x.
Und daher hast Du diese bekommen.
Wie wir wissen, kann man lss Exporte von 5.x aufwärts nicht in 3.x. abwärts importieren.
Das ist in Deinem Fall ja auch nicht schlimm; der Code ist derselbe.
Und den hast Du ja,
Also einfach den Code kopieren.

Die Beispiel-Datei des Tutorials läuft ja auch ohne jede Änderung in 3.x. und 5.x. (6.x. teste ich gerade, sieht aber auch gut aus)

Joffm

Aber noch einmal:
Wie stellst Du Dir die Auswertung dieser Frage eigentlich vor?
Weißt Du wie viele Lebensmittel mir einfallen können, und auf wie viele Arten ich diese auf die 10 Zeilen verteilen kann?
Und wie sieht es denn z.B. bei Kartoffeln aus?
Es ist doch ein Unterschied, ob ich sie hier bei meinem Bauern kaufe, oder aber bei Aldi die zypriotischen oder ägyptischen.
Das wirst Du aber auch nicht erkennen, oder?
Und außerdem bekommst Du viele, viele "laufende Läuse" (Lebensmittel, die ein- oder zweimal auftauchen); was sagt Dir dann Deine Skala? Nichts.

Gut, ich kenne die Zielsetzung nicht.
Wenn es darum geht, das Wissen bzw. die Einschätzung der Normalbevölkerung abzufragen, bleibt Dir nichts anderes als vordefinierte Lebensmittel anzubieten.
Mit der ganzen Variationsbreite von "Bananen aus Costa Rica", "Argentinisches Rindfleisch", "Lamm aus Neuseeland" bis zu "Mineralwasser aus der Rhön", oder was auch immer.

Ich habe Dich zumindest gewarnt.


 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 2 years 3 days ago by Joffm.

Please Log in to join the conversation.

More
2 years 3 days ago #249982 by ToniLeuphana
Bei meiner  Version 3.28.63. Nur ist hier das Format ein wenig durcheinander gekommen [url][/url] . Ich würde gerne die linke Spalte so klein machen, dass kein Platz verschwendet wird und die Zahlen von 1-10 noch sichtbar sind. 

Quellcode:
<p style="margin-bottom:11px"><span style="font-size:11pt"><span style="page-break-after:avoid"><span style="line-height:107%"><span style="font-family:Calibri,sans-serif">Der CO2-Fußabdruck von Lebensmitteln entsteht durch verschiedene Treibhausgase, wie , der Produktion und dem Transport von Lebensmitteln. </span></span></span></span></p>

<p style="margin-bottom:11px"><span style="font-size:11pt"><span style="page-break-after:avoid"><span style="line-height:107%"><span style="font-family:Calibri,sans-serif">Stellen Sie sich vor, Sie kaufen frisches Obst und Gemüse. Beispiele hierfür könnten sein:</span></span></span></span><br /><span style="font-size:11pt"><span style="page-break-after:avoid"><span style="line-height:107%"><span style="font-family:Calibri,sans-serif">1kg Speisezwiebeln, 1kg Äpfel, 1kg Karotten, 1kg Tomaten, 1 Kopfsalat, 1kg Bananen, eine Packung Champignons (300g), 1 Kohlkopf (800g), 1kg Kartoffeln, 500g Erdbeeren, 1kg Orangen</span></span></span></span></p>

<p style="margin-bottom:11px"><span style="font-size:11pt"><span style="page-break-after:avoid"><span style="line-height:107%"><span style="font-family:Calibri,sans-serif">Welche Merkmale sind ihrer Meinung nach typisch für frisches Obst und Gemüse mit einem niedrigen CO2-Fußabdruck?</span></span></span></span><br /><span style="font-size:11pt"><span style="page-break-after:avoid"><span style="line-height:107%"><span style="font-family:Calibri,sans-serif">Bitte zählen Sie alle Merkmale auf, die Ihnen einfallen. Bitte verwenden Sie für jedes Merkmal eine eigene Zeile:</span></span></span></span></p>
<script type="text/javascript" data-author="Tony Partner">

  $(document).on('ready pjax:scriptcomplete',function(){

    // Identify the questions
    var qArrayID = {QID};
    var qArray = $('#question'+qArrayID);
    var qMultiText = ('.multiple-short-txt:eq(0)');

    // Hide the multi-short-text question
    $(qMultiText).hide();

    // Remove the core column widths
    $(':not(.col-answers)', qArray).css('width', 'auto');

    // Insert the header cells
    $(':eq(0)', qArray).after('<th class="answer-text inserted-column-label" /></th>');
    $('.inserted-column-label', qArray).css('width','25%');

    // Insert the answer row cells
    $('', qArray).each(function(i) {
      $('.answertext', this).after('<td class="answer-item text-item"></td>');
    });

    // Load the column label for the text inputs
    $('.inserted-column-label:eq(0)', qArray).text($('.ls-label-question', qMultiText).text());


    // Loop through the multi-short-text sub-questions
    $('', qMultiText).each(function(i) {
      // Move the text inputs into the array
      $('input[type="text"]', this).appendTo($(':eq('+i+') .text-item', qArray));
    });




  });
</script>

Können Sie auf den Link zugreifen? Und ich weiß, dass dieses Fragenformat ein wenig umständlich ist. Im Anschluss werde ich den Freitext noch durchgehen und kodieren müssen, allerdings habe ich dafür auch schon ein grobes Raster.

LG
Toni[img][/img]

Please Log in to join the conversation.

More
2 years 3 days ago #249983 by ToniLeuphana

Please Log in to join the conversation.

More
2 years 2 days ago #250017 by Joffm
Hallo, Toni,
was ist das denn geworden?
1. Ich weiß, dass der Editor sehr gerne wahre <span>-Orgien veranstaltet. Aber das sollte dann doch bereinigt werden.
2. Werden jetzt keine Lebensmittel mehr genannt, sondern Maßnahmen?
Wie man die Spalten einstellt, siehst Du ja im Code der Frage.

Außerdem: 

Bitte zählen Sie alle Merkmale auf, die Ihnen einfallen.

Bei einer solchen Fragestellung bietet sich natürlich eine dynamische Lösung an wie Im Kap. 6, des "Matrizen"-Tutorials gezeigt

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
2 years 1 day ago #250103 by ToniLeuphana
Hallo,
ja dynamisch wäre natürlich sehr viel schöner. Bei der Version 3 gibt es aber auch nicht den Fragetype "Eingabe auf Anfrage" und ich glaube mit Java ist mir das leider zu kompliziert.
Für die Spaltenbreite kann ich die css-Funktion mit width nutzen oder? -> $('.inserted-column-label', qArray).css('width','25%')
Ich weiß nur nicht wie die erste Spalte hier definiert ist, also was ich anstelle von '.inserted-column-label',qArray) einsetzen soll. Habe es hiermit probiert: // Insert the header cells
$(':eq(0)', qArray).after('<th class="answer-text inserted-column-label" /></th>');
$('.inserted-column-label', qArray).css('width','25%');
$('', qArray).css('width','5%')
Hat aber leider nicht funktioniert.

Ansonsten benutzen Sie in Ihrem Tutorial dieses Skript:
$(document).on('ready pjax:scriptcomplete',function(){
var thisQuestion = $('#question{QID}');
// Add a question class
('custom-array');
// Column-specific classes
$('', thisQuestion).each(function(i) {
$('th, td', this).each(function(i) {
$(this).addClass('column-'+i);
});
});
});
<style type="text/css">
.custom-array {
width: auto !important;
}
.custom-array { width: 3%; }
.custom-array { width: 50%; }
.custom-array { width: 10%; }
.custom-array { width: 5%; }
.custom-array { width: 3%; }
.custom-array { width:3%; }
.custom-array { width: 5%; }
.custom-array { width: 3%; }
.custom-array { width: 3%; }
.custom-array { width: 10%; }
.custom-array { width: 5%; }
(habe die Prozentwerte angepasst, allerdings hat sich bei der Fragenvorschau nichts verändert, kann ich ansonsten auch dieses Skript benutzen?)

LG
Toni

Please Log in to join the conversation.

More
2 years 1 day ago #250104 by ToniLeuphana
$('', qArray).css('width','5%')
-> hiermit habe ich es probiert (leider nicht reinkopiert in der letzten Nachricht)

Please Log in to join the conversation.

More
2 years 1 day ago #250113 by Joffm

$('.inserted-column-label', qArray).css('width','25%');
$('', qArray).css('width','5%')
Hat aber leider nicht funktioniert.

Natürlich nicht. Wenn Du gar keine Klasse anspricht, wird sich nicht viel tun.
Hier wird die Breite der eingefügten Textbox eingestellt (die eingefügte Spalte)
Die Breite des Labels stellst Du doch ganz normal in den Einstellungen der Frage ein "Label-Spaltenbreite, oder so"

Allerdings: wenn Du dieses script zur Variablen Breite der Spalten benutzt, ist dies dann Spalte 0 und überschreibt diese Einstellung.
Brauchst Du aber nicht; die Textspalte ist festgelegt, die Labelbreite auch, und die Skala verteilt sich gleichmäßig über den Rest.

Und wenn Dir javascript zu kompliziert scheint, dann lade einfach die Beispiel-Datei aus dem Tutorial ind importiere sie.
Dann siehst Du ja wie es geht und wie es aussieht.
Dann kann man sehr leicht Anpassungen vornehmen.
Das ist nämlich auch das Einzige, was ich kann; die meisten dieser scripte stammen ja ursprünglich aus der Feder von Tony Partner.

Bis dann
Joffm
 

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
2 years 23 hours ago #250229 by ToniLeuphana
ah ok, das mit der Spaltenbreite ist ja wirklich easy.

wie füge ich denn den Quellcode für die dynamische Version in den bisherigen Quellcode ein (einfach dazu reinkopieren hat nicht geklappt haha).

Q6<script>
$(document).ready(function() {

// A function to add or remove rows of an Array (Multi Flexible)(Text) question
function varLengthArray(qID) {

if ($('#question'+qID+'').length > 0) {

// The HTML content of the Add/Remove elements - modify as you wish
var addContent = '[+] Zeile zufügen';
var removeContent = '[-] Zeile löschen';

// Create the Add and Remove elements & insert them
var el1 = document.createElement('div');
el1.setAttribute('id','addButton'+qID);
el1.setAttribute('class','btn btn-success');
document.body.appendChild(el1);
var el2 = document.createElement('div');
el2.setAttribute('id','removeButton'+qID);
el2.setAttribute('class','btn btn-danger');
document.body.appendChild(el2);

// Move them to after the array
$( 'div#addButton'+qID ).appendTo($( '#question' + qID + ' table.ls-answers' ).parent());
$( 'div#removeButton'+qID ).appendTo($( '#question' + qID + ' table.ls-answers' ).parent());

// Insert their HTML
$( 'div#addButton'+qID ).html( addContent );
$( 'div#removeButton'+qID ).html( removeContent );

// Style the elements - you can modify here if you wish
$( 'div#addButton'+qID ).css({
'margin':'10px 0 10px 10px',
'padding':'1px',
'text-align':'center',
'width':'auto',
'cursor':'pointer',
'float':'left'
});

$( 'div#removeButton'+qID ).css({
'margin':'10px 0 10px 10px',
'padding':'1px',
'text-align':'center',
'width':'auto',
'cursor':'pointer',
'float':'left'
});

// Initially hide the Remove element
$( 'div#removeButton'+qID ).hide();

// Call the functions below when clicked
$( 'div#addButton'+qID ).click(function (event) {
addRow(qID);
});
$( 'div#removeButton'+qID ).click(function (event) {
removeRow(qID);
});

// Function to add a row, also shows the Remove element and hides the
//Add element if all rows are shown
function addRow(qID) {
var arrayRow = '#question' + qID + ' table.ls-answers tr.subquestion-list';
var rowCount = $( arrayRow ).size() - 1;
$( arrayRow + '[name="hidden"]:first' ).attr('name', 'visible').show();
$( 'div#removeButton'+qID ).show();
if ( $( arrayRow + ':eq(' + rowCount + ')' ).attr('name') == 'visible' ) {
$( 'div#addButton'+qID ).hide();
}
}

// Function to remove a row, also clears the contents of the removed row,
// shows the Add element if the last row is hidden and hides the Remove
// element if only the first row is shown
function removeRow(qID) {
var arrayRow = '#question' + qID + ' table.ls-answers tr.subquestion-list';
var rowCount = $( arrayRow ).size() - 1;
$( arrayRow + '[name="visible"]:last input[type="text"]' ).val('');
$( arrayRow + '[name="visible"]:last' ).attr('name', 'hidden').hide();
$( 'div#addButton'+qID ).show();
if ( $( arrayRow + ':eq(1)' ).attr('name') == 'hidden' ) {
$( 'div#removeButton'+qID ).hide();
}
}

// Just some initialization stuff
var arrayRow = '#question' + qID + ' table.ls-answers tr.subquestion-list';
var rowCount = '';

// Initially hide all except first row or any rows with populated inputs
$( arrayRow ).each(function(i) {
if ( i > 0 ) {
// We also need to give the hidden rows a name cause IE doesn't
// recognize jQuery :visible selector consistently
$( this ).attr('name', 'hidden').hide();

$('input[type=text]', this).each(function(i) {
if ($(this).attr('value') != '') {
$(this).parents('tbody:eq(0)').attr('name', 'visible').show();
$( 'div#removeButton'+qID ).show();
}
});
rowCount = i;
}
});
}
}

// Call the function with a question ID
varLengthArray({QID});

});

</script>

Please Log in to join the conversation.

Moderators: holchJoffmtpartner

Lime-years ahead

Online-surveys for every purse and purpose