- Posts: 51
- Thank you received: 4
Ask the community, share ideas, and connect with other LimeSurvey users!
Please Log in to join the conversation.
Please Log in to join the conversation.
Please Log in to join the conversation.
Please Log in to join the conversation.
Habe jetzt die tatsächlich geplanten Listen in T1D3a einkopiert. In Spalte 2 werden immer noch alle angezeigt, nicht nur die Untergruppe nach Spalte 1.Welche Liste ist so lang? Anscheinend die Unterkategorie, oder?
Vermutlich ist es eine Geschmacksfrage. Ich würde lieber Tätigkeit und Dauer in einem Rutsch eintragen, auch deshalb, weil ich mir bis zu 30 Zeilen erwarte.Ja, aber Ober- und Unterkategorie kannst Du in eine Matrix stecken
Und dann fragst Du in einer zweiten Frage nach den Zeiten; ist doch kein großes Problem. Was soll daran holprig sein?
Danke!Deine Validierung hat noch Macken:
1. Es ist eine Fragenvalidierung, keine Teilfragenvalidierung.
2. Es sind wohl noch eine Linefeeds im Code.
Vielleicht besser mit Eingabemaske
Autocomplete habe ich schon mal verwendet und habe es auf dem Radar, aber in diesem Falle sollte die Liste der Tätigkeiten tatsächlich gelesen werden. Eventuell geht ja beides: Aufklappen, suchen und auswählen oder in Suchfeld Stichwort eingeben.Leider hast Du nichts Realistisches für E1 und E2 eingetragen. Nur das alte Beispiel mit den Hamburger Stadtteilen.
Dafür gibt es von mir dann eben die Bundesländer mit Kreisen.
Es stellt sich noch die Frage, ob Du mit "autocomplete" arbeiten möchtest.
Da gäbe es möglicherweise auch ganz charmante Lösungen, da hier wieder eine direkte Abhängigkeit in einer Frage gezeigt werden kann.Wieviele Tätigkeiten erwartest Du eigentlich an einem Tag?
Bis dann
Joffm
Please Log in to join the conversation.
Please Log in to join the conversation.
Das schaut gut aus ... das werde ich weiter verfolgen.Hallo,
hier noch eine andere Idee.
Wie gehabt, zwei Matrizen; 1. Dual Matrix, 2. Normale Textmatrix (in einer Gruppe)
Mit den Klassen "no-question" und "no-bottom" aneinandergeschoben.
In der zweiten Matrix ein paar Präfixe eingebaut, und zwei Eingabemasken in die Zeitfragen.
In Deiner Idee waren ja auch schon die Buttons für weitere Tätigkeiten.
Hier wird nun keine weitere Matrixzeile angezeigt, sondern einfach die nächste Gruppe - oder eben keine mehr, falls der Teilnehmer fertig ist.
Man kann jetzt an der Schönheit feilen; ob hier die Widerholung der Tätigkeit in der zweiten Zeile nötig ist, glaube ich nicht.
Die Untersuchung läuft über 16 Wochen. Die Stichprobe ist in Kohorten aufgeteilt, jeder Kohorte ist eine Woche zugeteilt, in der die Leute alle schulischen Tätigkeiten mit Zeitangaben erfassen sollen. Woche und Tage der Woche stehen alle als Attribute in der Teilnehmerliste. So kann man
Gerade haben sich die Dinge gekreuzt.
Du erwartest also bis zu 30 Tätigkeiten an einem Tag. Das ist dann ja ganz schön aufgefieselt.
Es könnte jetzt sein, dass die Datenbank dies dann nicht mehr mitmacht.
Du weißt ja,
mit der InnoDB-Engine ist die Maimalzahl 1000
mnit der MyISAM-Engine so in der Gegend von 1500-1700.
Ich habe zwar keine Ahnung welche Engine LimeSurvey benutzt, würde aber stark auf InnoDB tippen.
Du kannst es ja leicht testen. Einfach einmal eine Umfrage mit einer entsprechenden Spaltenzahl anlegen und versuchen zu aktivieren.
Aber warum sollen die Leute denn 7 Tage innerhalb einer Umfrage beantworten?
Das muss ich mir anschauen. Spontan kommt die Frage, ob ich so die Antwortenden in der Sohn und Enkelumfrage identifizieren kann. Ich werde diesbezüglich deine Beiträge im Forum suchen.Hier könnte ich mir zum Beispiel ein "Vater-Sohn-Enkel"-Szenario vorstellen.
In der Vaterumfrage kommt irgendein Einstieg in das Ganze mit den Anfangsfragen.
Dann wird in der end-url zum "Sohn" verlinkt, der einen Tag abfragt und sich dann wieder selbst aufruft - mit dem nächsten Tag, bis die 7 Tage abgearbeitet sind.
Danke vielmals derweil.In diesem Fall wird dann wieder zum "Enkel" weitergeleitet, mit den Abschlussfragen.
Dazu gibt es schon ein paar Beispiele von mir im Forum.
Hier ist es natürlich problematisch, dass es nicht so leicht ist, einfach einmal in der Mitte des Sohnes zu unterbrechen.
Leider kannst Du in der LimeQuery-Installation auch keine Plugins installieren; "updateTokenByResponse" wäre hier ein Wunschkandidat.
So, ich gucke einmal nach Deiner lss
Bis dann
Joffm
Please Log in to join the conversation.
Please Log in to join the conversation.
Ja, da fehlt es mir noch an der Forumskultur.Naja, wie so häufig stellt sich heraus, dass die eigentliche Frage nur die "halbe Wahrheit" war.
Dass es eben nicht um eine einzige Matrix ging, sondern um mehrere, die dann auch noch mit diesem Index angesteuert werden sollen.
Wenn du mir die verschachtelten optgroups noch schicken könntest, wäre das fein. Ich habe auf die Schnelle nicht gefunden, wie das geht. Vielen Dank auf jeden Fall für Deine Hilfe.Aber gut, wie Du schon erwähnt hattest, muss man dies dann wohl mit "optgroups" erschlagen.
Das geht doch auch recht gut.
Einfach "optgroup" in "optgroup" verschachtelt, und jeder eine Klasse gegeben, der mit css eine Farbe zugeordnet wird.
Joffm
Please Log in to join the conversation.
Bitte tragen Sie die einzelnen Tätigkeiten ein. <script type="text/javascript" charset="utf-8"> // Script für die eingefügten Drop-Downs $(document).on('ready pjax:scriptcomplete',function(){ var thisQuestion = $('#question{QID}'); // Insert selects $('.answer-item.answer_cell_X001', thisQuestion).addClass('with-select').append('<select class="inserted-select form-control list-question-select">\ <option value="">Bitte, wählen Sie ...</option>\ <optgroup class="opt1" label="A Unterrichts- und Erziehungstätigkeiten">\ <optgroup class="opt2" label="Unterricht, Förder-, Stütz- und Nachholmaßnahmen, schulergänzende Tätigkeiten">\ <option value="01001">Unterricht ohne Mitwirkung von Kollegen/Kolleginnen</option>\ <option value="01002">Unterricht gemeinsam mit Kollegen/Kolleginnen (Teamunterricht, Kopräsenzen, usw.)</option>\ <option value="01003">Supplenzstunden im Bereitschaftsdienst (nur tatsächlich geleistete)</option>\ <option value="01004">Andere Supplenzstunden </option>\ <option value="01005">Nachholtätigkeiten, Stützmaßnahmen, Vertiefungen</option>\ <option value="01006">Schulergänzende Tätigkeiten und Projekte außerhalb des curricularen Stundenplans</option>\ </optgroup>\ <optgroup class="opt2" label="Begleit-, Aufsichts- und Betreuungsdienste">\ <option value="02001">Beaufsichtigung von Schülern/Schülerinnen</option>\ <option value="02002">Begleit- und Betreuungsdienste von kurzer Dauer (max. 6 Stunden)</option>\ <option value="02003">Begleit- und Betreuungsdienste von einem oder mehreren Tagen Dauer</option>\ <option value="02004">Sonstige Erziehungstätigkeiten</option>\ </optgroup>\ <optgroup class="opt2" label="Prüfungen, andere Unterrichtstätigkeiten">\ <option value="03001">Mitwirkung bei Prüfungen und bei den damit zusammenhängenden Aufgaben</option>\ <option value="03002">Unterrichtsbezogene Beratung und Betreuung von Schülern/Schülerinnen</option>\ <option value="03003">Sonstige Unterrichtsbezogene Tätigkeiten mit Schülern/Schülerinnen</option>\ </optgroup>\ </optgroup>\ <optgroup class="opt1" label="B Individuelle unterrichtsbezogene Tätigkeiten">\ <optgroup class="opt2" label="Individuelle Planung und Vorbereitung des Unterrichts">\ <option value="04001">Langfristige individuelle Planung und Vorbereitung des Unterrichts</option>\ <option value="04002">Kurzfristige individuelle Vorbereitung des Unterrichts (ausgenommen Leistungskontrollen)</option>\ <option value="04003">Individuelle Erstellung von Unterrichtsmaterialien</option>\ <option value="04004">Individuelle organisatorische Tätigkeiten im Zusammenhang mit dem Unterricht</option>\ <option value="04005">Individuelle organisatorische Tätigkeiten im Zusammenhang mit Unterrichtsprojekten und Schulveranstaltungen</option>\ <option value="04006">Individuelle Vorbereitung von Schularbeiten und verbindlichen praktischen oder grafischen Arbeiten</option>\ <option value="04007">Individuelle Vorbereitung anderer Leistungskontrollen</option>\ <option value="04008">Individuelle Vorbereitung von Prüfungsarbeiten</option>\ </optgroup>\ <optgroup class="opt2" label="Individuelle Nachbereitung, Bewertung und Dokumentation des Unterrichts">\ <option value="05001">Langfristige individuelle Auswertung und Dokumentation des Unterrichts </option>\ <option value="05002">Individuelle Nachbereitung und Auswertung des Unterrichts</option>\ <option value="05003">Individuelle Korrektur und Bewertung von Schularbeiten und verbindlich vorgeschriebenen praktischen oder grafischen Arbeiten</option>\ <option value="05004">Individuelle Korrektur und Bewertung anderer Leistungskontrollen</option>\ <option value="05005">Individuelle Beurteilung der Schüler/innen und entsprechende Dokumentation</option>\ <option value="05006">Individuelle Korrektur und Bewertung von Prüfungsarbeiten</option>\ </optgroup>\ </optgroup>\ </select>'); $('.answer-item.answer_cell_X004', thisQuestion).addClass('with-select').append('<select class="inserted-select form-control list-question-select">\ <option value="">...</option>\ <option value="1">ja</option>\ <option value="2">nein</option>\ </select>'); // Listeners $('.inserted-select', thisQuestion).on('change', function(i) { if($(this).val() != '') { $(this).closest('.answer-item').find('input:text').val($('option:selected', this).val()).trigger('change'); } else { $(this).closest('.answer-item').find('input:text').val('').trigger('change'); } }); // Returning to page $('.with-select input:text', thisQuestion).each(function(i) { var thisCell = $(this).closest('.answer-item'); var inputText = $.trim($(this).val()); $('select.inserted-select', thisCell).val(inputText); }); // Clean-up styles $('select.inserted-select', thisQuestion).css({ 'max-width': '100%' }); $('.with-select input:text', thisQuestion).css({ 'position': 'absolute', 'left': '-9999em' }); }); </script> <style type="text/css"> /* Und ein bisschen Styling für die Kategorie-Texte */ .opt1 { color: red; font-size:20px; font-style: normal; } .opt2 { color: blue; font-weight:normal; background-color: darkgray; } option { color:black; } .ls-answers tbody .answertext { text-align: left !important; } </style> <script> // Das script für die dynamische Anzeige der Matrixzeilen $(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> <script type="text/javascript" charset="utf-8"> // Script, um die Spaltenbreite variabel zu machen $(document).on('ready pjax:scriptcomplete',function(){ var thisQuestion = $('#question{QID}'); // Add a question class thisQuestion.addClass('custom-array'); // Column-specific classes $('table.subquestion-list tr', thisQuestion).each(function(i) { $('th, td', this).each(function(i) { $(this).addClass('column-'+i); }); }); }); </script> <style type="text/css"> /* Das css, welches die Breite der Spalten festlegt */ .custom-array table.subquestion-list col { width: auto !important; } .custom-array table.subquestion-list thead .column-0 { width: 4%; } .custom-array table.subquestion-list thead .column-1 { width: 57%; } .custom-array table.subquestion-list thead .column-2 { width: 13%; } .custom-array table.subquestion-list thead .column-3 { width: 13%; } .custom-array table.subquestion-list thead .column-4 { width: 13%; } </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/inputmask/4.0.9/jquery.inputmask.bundle.min.js"></script> /* Sauberer ist es, das script herunterzuladen und auf dem Server zu speichern */ <script type="text/javascript" charset="utf-8"> // Script, um Eingabemasken in die beiden Zeitfelder einzufügen $(document).on('ready pjax:scriptcomplete',function(){ $('#question{QID} .answer-item.answer_cell_X002 input[type="text"]').inputmask({ 'regex':'([01][0-9]|2[0-3]):[0-5][0-9]', 'placeholder': 'hh:mm', 'removeMaskOnSubmit': false, 'rightAlign': false, }); $('#question{QID} .answer-item.answer_cell_X003 input[type="text"]').inputmask({ 'regex':'([01][0-9]|2[0-3]):[0-5][0-9]', 'placeholder': 'hh:mm', 'removeMaskOnSubmit': false, 'rightAlign': false, }); }); </script> <script type="text/javascript" data-author="Tony Partner"> // Script, um Suffixe an die Zeiteingaben anzuhängen $(document).on('ready pjax:scriptcomplete',function(){ // Input suffix $('#question{QID} :text.form-control:eq(1)').after('<span class="inserted-suffix"> Uhr</span>').css({ 'display': 'inline-block', 'width': '40%' }); $('#question{QID} :text.form-control:eq(2)').after('<span class="inserted-suffix"> Std.</span>').css({ 'display': 'inline-block', 'width': '40%' }); }); </script>
Please Log in to join the conversation.
Bitte tragen Sie die einzelnen Tätigkeiten ein. <script type="text/javascript" charset="utf-8"> // Script für die eingefügten Drop-Downs $(document).on('ready pjax:scriptcomplete',function(){ var thisQuestion = $('#question{QID}'); // Insert selects $('.answer-item.answer_cell_X001', thisQuestion).addClass('with-select').append('<select class="inserted-select form-control list-question-select">\ <option value="">Bitte, wählen Sie ...</option>\ <optgroup class="opt1" label="A Unterrichts- und Erziehungstätigkeiten">\ <optgroup class="opt2" label="Unterricht, Förder-, Stütz- und Nachholmaßnahmen, schulergänzende Tätigkeiten">\ <option value="01001">Unterricht ohne Mitwirkung von Kollegen/Kolleginnen</option>\ <option value="01002">Unterricht gemeinsam mit Kollegen/Kolleginnen (Teamunterricht, Kopräsenzen, usw.)</option>\ <option value="01003">Supplenzstunden im Bereitschaftsdienst (nur tatsächlich geleistete)</option>\ <option value="01004">Andere Supplenzstunden </option>\ <option value="01005">Nachholtätigkeiten, Stützmaßnahmen, Vertiefungen</option>\ <option value="01006">Schulergänzende Tätigkeiten und Projekte außerhalb des curricularen Stundenplans</option>\ </optgroup>\ <optgroup class="opt2" label="Begleit-, Aufsichts- und Betreuungsdienste">\ <option value="02001">Beaufsichtigung von Schülern/Schülerinnen</option>\ <option value="02002">Begleit- und Betreuungsdienste von kurzer Dauer (max. 6 Stunden)</option>\ <option value="02003">Begleit- und Betreuungsdienste von einem oder mehreren Tagen Dauer</option>\ <option value="02004">Sonstige Erziehungstätigkeiten</option>\ </optgroup>\ <optgroup class="opt2" label="Prüfungen, andere Unterrichtstätigkeiten">\ <option value="03001">Mitwirkung bei Prüfungen und bei den damit zusammenhängenden Aufgaben</option>\ <option value="03002">Unterrichtsbezogene Beratung und Betreuung von Schülern/Schülerinnen</option>\ <option value="03003">Sonstige Unterrichtsbezogene Tätigkeiten mit Schülern/Schülerinnen</option>\ </optgroup>\ </optgroup>\ <optgroup class="opt1" label="B Individuelle unterrichtsbezogene Tätigkeiten">\ <optgroup class="opt2" label="Individuelle Planung und Vorbereitung des Unterrichts">\ <option value="04001">Langfristige individuelle Planung und Vorbereitung des Unterrichts</option>\ <option value="04002">Kurzfristige individuelle Vorbereitung des Unterrichts (ausgenommen Leistungskontrollen)</option>\ <option value="04003">Individuelle Erstellung von Unterrichtsmaterialien</option>\ <option value="04004">Individuelle organisatorische Tätigkeiten im Zusammenhang mit dem Unterricht</option>\ <option value="04005">Individuelle organisatorische Tätigkeiten im Zusammenhang mit Unterrichtsprojekten und Schulveranstaltungen</option>\ <option value="04006">Individuelle Vorbereitung von Schularbeiten und verbindlichen praktischen oder grafischen Arbeiten</option>\ <option value="04007">Individuelle Vorbereitung anderer Leistungskontrollen</option>\ <option value="04008">Individuelle Vorbereitung von Prüfungsarbeiten</option>\ </optgroup>\ <optgroup class="opt2" label="Individuelle Nachbereitung, Bewertung und Dokumentation des Unterrichts">\ <option value="05001">Langfristige individuelle Auswertung und Dokumentation des Unterrichts </option>\ <option value="05002">Individuelle Nachbereitung und Auswertung des Unterrichts</option>\ <option value="05003">Individuelle Korrektur und Bewertung von Schularbeiten und verbindlich vorgeschriebenen praktischen oder grafischen Arbeiten</option>\ <option value="05004">Individuelle Korrektur und Bewertung anderer Leistungskontrollen</option>\ <option value="05005">Individuelle Beurteilung der Schüler/innen und entsprechende Dokumentation</option>\ <option value="05006">Individuelle Korrektur und Bewertung von Prüfungsarbeiten</option>\ </optgroup>\ </optgroup>\ </select>'); $('.answer-item.answer_cell_X004', thisQuestion).addClass('with-select').append('<select class="inserted-select form-control list-question-select">\ <option value="">...</option>\ <option value="1">ja</option>\ <option value="2">nein</option>\ </select>'); // Listeners $('.inserted-select', thisQuestion).on('change', function(i) { if($(this).val() != '') { $(this).closest('.answer-item').find('input:text').val($('option:selected', this).val()).trigger('change'); } else { $(this).closest('.answer-item').find('input:text').val('').trigger('change'); } }); // Returning to page $('.with-select input:text', thisQuestion).each(function(i) { var thisCell = $(this).closest('.answer-item'); var inputText = $.trim($(this).val()); $('select.inserted-select', thisCell).val(inputText); }); // Clean-up styles $('select.inserted-select', thisQuestion).css({ 'max-width': '100%' }); $('.with-select input:text', thisQuestion).css({ 'position': 'absolute', 'left': '-9999em' }); }); </script> <style type="text/css"> /* Und ein bisschen Styling für die Kategorie-Texte */ .opt1 { color: red; font-size:20px; font-style: normal; } .opt2 { color: blue; font-weight:normal; background-color: darkgray; } option { color:black; } .ls-answers tbody .answertext { text-align: left !important; } </style> <script> // Das script für die dynamische Anzeige der Matrixzeilen $(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> <script type="text/javascript" charset="utf-8"> // Script, um die Spaltenbreite variabel zu machen $(document).on('ready pjax:scriptcomplete',function(){ var thisQuestion = $('#question{QID}'); // Add a question class thisQuestion.addClass('custom-array'); // Column-specific classes $('table.subquestion-list tr', thisQuestion).each(function(i) { $('th, td', this).each(function(i) { $(this).addClass('column-'+i); }); }); }); </script> <style type="text/css"> /* Das css, welches die Breite der Spalten festlegt */ .custom-array table.subquestion-list col { width: auto !important; } .custom-array table.subquestion-list thead .column-0 { width: 4%; } .custom-array table.subquestion-list thead .column-1 { width: 57%; } .custom-array table.subquestion-list thead .column-2 { width: 13%; } .custom-array table.subquestion-list thead .column-3 { width: 13%; } .custom-array table.subquestion-list thead .column-4 { width: 13%; } </style> <script src="https://cdnjs.cloudflare.com/ajax/libs/inputmask/4.0.9/jquery.inputmask.bundle.min.js"></script> /* Sauberer ist es, das script herunterzuladen und auf dem Server zu speichern */ <script type="text/javascript" charset="utf-8"> // Script, um Eingabemasken in die beiden Zeitfelder einzufügen $(document).on('ready pjax:scriptcomplete',function(){ $('#question{QID} .answer-item.answer_cell_X002 input[type="text"]').inputmask({ 'regex':'([01][0-9]|2[0-3]):[0-5][0-9]', 'placeholder': 'hh:mm', 'removeMaskOnSubmit': false, 'rightAlign': false, }); $('#question{QID} .answer-item.answer_cell_X003 input[type="text"]').inputmask({ 'regex':'([01][0-9]|2[0-3]):[0-5][0-9]', 'placeholder': 'hh:mm', 'removeMaskOnSubmit': false, 'rightAlign': false, }); }); </script> <script type="text/javascript" data-author="Tony Partner"> // Script, um Suffixe an die Zeiteingaben anzuhängen $(document).on('ready pjax:scriptcomplete',function(){ // Input suffix $('#question{QID} :text.form-control:eq(1)').after('<span class="inserted-suffix"> Uhr</span>').css({ 'display': 'inline-block', 'width': '40%' }); $('#question{QID} :text.form-control:eq(2)').after('<span class="inserted-suffix"> Std.</span>').css({ 'display': 'inline-block', 'width': '40%' }); }); </script>
Vielen Dank, damit komme ich hoffentlich zurecht.
Die Liste stammt aus einer Vorläuferuntersuchung und wird wohl noch einmal ergänzt, hoffentlich gekürzt werden.
Jede Matrix sollte einen Tag abbilden.
Einverstanden. Das wording sollte besser sein.
Ehrlich gesagt war mir das nicht so klar - ich werde mich da weiterbilden.
Möchte hier auch anmerken, dass es mir vollkommen bewusst ist, dass hier jemand meine Themen löst - danke dafür. Es gibt ja im Forum einen Spendenknopf, kommt der dem Forum hier zugute?
Please Log in to join the conversation.
<script type="text/javascript" data-author="Tony Partner"> // Script, um Suffixe an die Zeiteingaben anzuhängen $(document).on('ready pjax:scriptcomplete',function(){ var x=$('#question{QID} .subquestion-list').length; for (i=1;i<x;i++) { $('#question{QID} tr:eq('+i+') .answer-item :text.form-control:eq(1)').after('<span class="inserted-suffix"> Uhr</span>').css({ 'display': 'inline-block', 'width': '50%' }); $('#question{QID} tr:eq('+i+') .answer-item :text.form-control:eq(2)').after('<span class="inserted-suffix"> Std.</span>').css({ 'display': 'inline-block', 'width': '50%' }); } }); </script>
Please Log in to join the conversation.
Danke. Hatte gestern rumprobiert, aber nicht gelöst.Hallo,
kleine Korrektur im Script für die Suffixe.
Code:<script type="text/javascript" data-author="Tony Partner"> // Script, um Suffixe an die Zeiteingaben anzuhängen $(document).on('ready pjax:scriptcomplete',function(){ var x=$('#question{QID} .subquestion-list').length; for (i=1;i<x;i++) { $('#question{QID} tr:eq('+i+') .answer-item :text.form-control:eq(1)').after('<span class="inserted-suffix"> Uhr</span>').css({ 'display': 'inline-block', 'width': '50%' }); $('#question{QID} tr:eq('+i+') .answer-item :text.form-control:eq(2)').after('<span class="inserted-suffix"> Std.</span>').css({ 'display': 'inline-block', 'width': '50%' }); } }); </script>
Mach ich also.Was die Spende angeht:
Diese geht an die LimeSurvey GmbH, mit der wir hier ja nichts zu tun haben.
Es ist aber auf jeden Fall eine gute Tat, ein Open Source Projekt zu unterstützen, mit dem man regelmäßig arbeitet (auch wenn Du ja die Mietversion benutzt)
Hätte einen passablen Eigenbau anzubieten, hier ist eher Weingegend ... (Bozen). Es soll ja vorkommen, dass Deutsche ab und zu über den Brenner fahren, vielleicht kann da ja eine Flasche den Besitzer wechseln. Ist durchaus ernst gemeint ...Und für uns freiwillige Helfer, die wir hier im Forum unterwegs sind, gilt:
Wir machen dies aus reiner Hilfsbereitschaft, aus Spaß an der Freude, weil wir nichts anderes zu tun haben, oder auch - wie ich - für eine Tasse Kaffee oder ein kühles Bierchen, je nach Tageszeit.
Du kannst ja einmal eins rüberschicken.
Bis dann
Joffm
Please Log in to join the conversation.
, Meldung, sonst nichts.Please Log in to join the conversation.
Das nehme ich dankend auch noch mit.Hallo,
noch ein Zusatz.
Du kannst diese Frage ja nicht zur Pflichtfrage machen - die nicht angezeigten Zeilen sind ja leer.
Daher musst Du irgendwie validieren, dass alles ausgefüllt wurde.
Dazu ist mir dies eingefallen:
Es muss ja gelten, dass in jeder angezeigten Zeile 4 Felder ausgefüllt werden. Also ist die Gesamtanzahl der Nennungen gleich der Zeilenzahl mal 4.
Und das hat die schöne kurze Validierungsgleichung:
count(self)==4*countifop("ne","",self.sq_X001.NAOK)
count(self): Anzahl der Nennungen der gesamten Frage
countifop: Anzahl der Nennungen in der ersten Spalte (X001), wenn diese nicht leer ist.
Dann noch ein knackiger Validierungshinweis, wie z.B.
{if(count(self)!=4*countifop("ne","",self.sq_X001.NAOK),'Bitte, füllen Sie alle Felder der Zeile aus!','')}
Wenn die Gleichung nicht erfüllt ist (!, Meldung, sonst nichts.
... und heiß ist es auch noch. Aber wer weiß. LGJoffm
P.S.
Was den Wein angeht, da nehme ich einmal den guten Willen für die Tat.
Das Alter fordert seinen Tribut. Guck einmal in mein Profil. Solche Autofahrten sind die reinste Folter für meinen Rücken und meine Hüfte.
Please Log in to join the conversation.