Welcome to the LimeSurvey Community Forum

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

Matrixfrage - zweite Skala abhängig von der ersten

More
4 weeks 1 day ago #274716 by agostini
Bitte helfen Sie uns, Ihnen zu helfen und füllen Sie folgende Felder aus:
Ihre LimeSurvey-Version: [siehe rechts unten auf Ihrem LimeSurvey-Verwaltungsbildschirm]
Eigener Server oder LimeSurvey-Cloud:
Genutzte Designvorlage:
==================
LimeSurvey-Cloud 6.17.12
fruity
Ich habe mit viel Gewinn das Matrix-Tutorial genutzt und vieles davon schon gebraucht - vielen Dank voraus!

Jetzt wollte ich in einer Matrixfrage, in der unter anderem zwei Spalten mit Dropdown-Funktion vorkommen, die zweite in Abhängigkeit von der Auswahl der ersten Spalte einsetzten, so wie es für eine Dualmatrix-Frage im genannten Tutorial beschrieben ist (Punkt 15.2). Ich möchte diese Funktion aber in einer Matrix mit weiteren Spalten einsetzen. Hat jemand eine Idee, wie man so was machen könnte?

Die Tabelle ist Teil einer Zeitverwendungsstudie und würde so ausschauen:

Tätigkeit grob - Tätigkeit fein - Startzeit - Dauer - Ort.

In Tätigkeit fein erscheint eine nach Tätigkeit grob gefilterte Unterauswahl.

Danke!
Helmuth

Please Log in to join the conversation.

More
4 weeks 7 hours ago #274728 by Joffm
Hallo,
ich wäre da sehr pragmatisch und würde die Frage teilen.
1. Diese Dual-Scale-Gedschichte, dann
2. eine normale Textmatrix, in welche Du die Antworten der ersten Frage einfügst; dann vielleicht Startzeit und Dauer als Eingabemaske



Ansonsten schicke eine lss.

Joffm

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

Please Log in to join the conversation.

More
3 weeks 2 days ago #274754 by agostini
Teilen geht, ist aber in diesem Fall nicht ganz ideal. Hier sollen Arbeitszeiten des aktuellen Tages oder des Vortages mit ihrer Dauer erfasst werden, und das zu trennen wird holprig. Schicke mal die entsprechende Frage mit. Die Tätigkeitsliste in Frage 3 ist etwa 60 items lang. Man kann im Prinzip schon alles in eine Liste (mit Zwischentiteln) tun, aber besser wäre hat die Variante d3a, wo man in Spalte 1 die Hauptkategorien und in Spalte 2 dann die Unterkategorien der in Spalte 1 gewählten Hauptkategorie auswählt. 
Danke für`s darufschauen!

Please Log in to join the conversation.

More
3 weeks 2 days ago #274758 by Joffm
Welche Liste ist so lang? Anscheinend die Unterkategorie, oder?
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?
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

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

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

Please Log in to join the conversation.

More
3 weeks 1 day ago #274765 by agostini

Welche Liste ist so lang? Anscheinend die Unterkategorie, oder?
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.

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?

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. 

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

Danke!

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?

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.
Erlaube mir, noch einmal die Gruppe anzufügen. 

Bringe unverschämterweise noch eine Frage an: Eine Matrix mit 5 Spalten und max. 30 Zeilen erzeugt schon 150 Spalten in der Datentabelle, x 7 Tage (wie geplant) sind schon 1.050 Spalten. Dazu kommt noch ein Start- und ein Abschlussfragebogen mit sicherlich noch einmal 200 Spalten. Schafft das die Datenbank? Das Ganze soll beim Limequery-Hosting laufen.
Danke vielmals.

Bis dann
Joffm

Please Log in to join the conversation.

More
3 weeks 1 day ago #274766 by Joffm
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.



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?
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.
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 
 

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

Please Log in to join the conversation.

More
3 weeks 1 day ago #274767 by agostini

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.
 
Das schaut gut aus ... das werde ich weiter verfolgen. 



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?

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
  • gezielt einladen, ev. sogar täglich
  • den Personen ihren Stichprobentag ansagen/sie dran erinnern
  • der Befragungslink bleibt immer der gleiche.
Die Idee war es, jeden Tag in eine Gruppe zu stellen, die nur sichtbar ist, wenn der Stichprobentag erreicht ist (steht auch schon im Entwurf so drinnen). Über die Indexfunktion kann man ev. auf die vorhergehenden Tage zurückgehen und noch etwas ergänzen/korrigieren. 
Mit deiner Lösung oben würde dieses Zurückspringen nicht mehr funktionieren, weil es ja für jeden Tag mehrere Gruppen gibt und das Ganze dann unübersichtlich wird. 

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.

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.

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 

Danke vielmals derweil.

Please Log in to join the conversation.

More
3 weeks 1 day ago #274771 by Joffm
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.

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

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

Please Log in to join the conversation.

More
3 weeks 17 hours ago #274772 by agostini

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.
 
Ja, da fehlt es mir noch an der Forumskultur. 

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.

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. 

Joffm

Please Log in to join the conversation.

More
3 weeks 13 hours ago - 3 weeks 13 hours ago #274773 by Joffm
Okay, hier ein lss Export dieser Frage.

File Attachment:

File Name: limesurvey...2959.lss
File Size:41.17 KB

Ich habe einmal alles hineingepackt:
  • Dynamische Zeilen
  • Drop-Down mit geschachteltem "optgroup"
  • Eingabemaske bei den Zeitfragen
  • Suffixe an den Zeitfeldern
  • Variable Spaltenbreiten

Hier das Script, bzw. die Scripte (ich habe alle separat eingestellt, so dass man leicht nicht gewollte entfernen kann)
Code:
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 &amp; 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>


Noch zwei (oder drei) Bemerkungen:
  1. In der lss, die Du geschickt hattest, waren mehrere identische Codes in den Tätigkeiten.
    Schau noch einmal!
  2. Wie macht man dies?

    Per Definition können es mehrere Tage sein; was trägt der Lehrer bei "Dauer" ein, da hier maximal 23:59 möglich ist?
  3. Etwas, das mich ein bisschen genervt hat.
     
    In den Kategorien steht schon zweimal "individuell"; und dann erscheint es bei jeder Tätigkeit wieder und wieder.
    Aber das ist wirklich marginal.
Bis dann
Joffm


P.S.
Und lass diesen uralten "Bedingungsdesigner" weg; benutze ExpressionScript.
Ich habe ja in meinem Tutorial über Gleichungen und ExpressionScript kurz etwas dazu geschrieben (Seite 3)
Und hier ist ein Pro-Con Übersicht im Handbuch
[url] www.limesurvey.org/manual/ExpressionScri...Relevanz_w%C3%A4hlen ?[/url]
"Bedingung" ist der Bedingungsdesigner
"Relevanz" das, was jetzt "Bedingung" heißt, früher aber "Relevanzgleichung" genannt wurde.

 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 3 weeks 13 hours ago by Joffm.

Please Log in to join the conversation.

More
3 weeks 12 hours ago #274774 by agostini
Okay, hier ein lss Export dieser Frage.

File Attachment:

File Name: limesurvey...2959.lss
File Size:41.17 KB

Ich habe einmal alles hineingepackt:
  • Dynamische Zeilen
  • Drop-Down mit geschachteltem "optgroup"
  • Eingabemaske bei den Zeitfragen
  • Suffixe an den Zeitfeldern
  • Variable Spaltenbreiten

Hier das Script, bzw. die Scripte (ich habe alle separat eingestellt, so dass man leicht nicht gewollte entfernen kann)
Code:
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 &amp; 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.


Noch zwei (oder drei) Bemerkungen:
  1. In der lss, die Du geschickt hattest, waren mehrere identische Codes in den Tätigkeiten.
    Schau noch einmal!

Die Liste stammt aus einer Vorläuferuntersuchung und wird wohl noch einmal ergänzt, hoffentlich gekürzt werden.

  1. Wie macht man dies?

    Per Definition können es mehrere Tage sein; was trägt der Lehrer bei "Dauer" ein, da hier maximal 23:59 möglich ist?

Jede Matrix sollte einen Tag abbilden. 

  1. Etwas, das mich ein bisschen genervt hat.
     
    In den Kategorien steht schon zweimal "individuell"; und dann erscheint es bei jeder Tätigkeit wieder und wieder.
    Aber das ist wirklich marginal.

Einverstanden. Das wording sollte besser sein.


Bis dann
Joffm


P.S.
Und lass diesen uralten "Bedingungsdesigner" weg; benutze ExpressionScript.
Ich habe ja in meinem Tutorial über Gleichungen und ExpressionScript kurz etwas dazu geschrieben (Seite 3)
Und hier ist ein Pro-Con Übersicht im Handbuch
[url] www.limesurvey.org/manual/ExpressionScri...Relevanz_w%C3%A4hlen ?[/url]
"Bedingung" ist der Bedingungsdesigner
"Relevanz" das, was jetzt "Bedingung" heißt, früher aber "Relevanzgleichung" genannt wurde.

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? 


lg

Please Log in to join the conversation.

More
3 weeks 6 hours ago #274775 by Joffm
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>

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)
 
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
 

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

Please Log in to join the conversation.

More
2 weeks 6 days ago #274776 by agostini

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>
 
Danke. Hatte gestern rumprobiert, aber nicht gelöst.

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)

Mach ich also. 

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.

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 ...

Danke nochmal!

Bis dann
Joffm

Please Log in to join the conversation.

More
2 weeks 6 days ago - 2 weeks 6 days ago #274777 by Joffm
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.

Joffm

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.

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 2 weeks 6 days ago by Joffm.
The following user(s) said Thank You: agostini

Please Log in to join the conversation.

More
2 weeks 6 days ago #274778 by agostini

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.
 
Das nehme ich dankend auch noch mit.

Joffm

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.

... und heiß ist es auch noch. Aber wer weiß. LG

Please Log in to join the conversation.

Moderators: holchJoffmtpartner

Lime-years ahead

Online-surveys for every purse and purpose