Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:create:questions:slider [14.04.2022 18:55] – [Beispiel: Prozente] adminde:create:questions:slider [11.06.2024 15:52] (aktuell) admin
Zeile 82: Zeile 82:
 **Hinweis:** Damit überhaupt ein Wert angezeigt wird, aktivieren Sie in der Frage zunächst die Option //Wert anzeigen//. **Hinweis:** Damit überhaupt ein Wert angezeigt wird, aktivieren Sie in der Frage zunächst die Option //Wert anzeigen//.
  
-**Hinweis:** Der interne Wert liegt zwischen 1 und der definierten Differenzierung der Skala (Standard: 101). Der interne Wert muss keine ganze Zahl sein, denn der Schieberegler bewegt sich ja stufenlos, sofern die Differenzierung größer als 20 ist.+**Hinweis:** Der interne Wert liegt zwischen 1 und der definierten Differenzierung der Skala (Standard: 101).
  
 **Hinweis:** Während der Bedienung des Schiebereglers wird intern mit einer Dezimalzahl gearbeitet, denn der Schieberegler bewegt sich ja stufenlos, wenn eine Differenzierung größer als 20 eingestellt ist. Für die Ausgabe muss dieser Wert (''value'') evtl. auf eine Ganzzahl gerundet werden, um den gleichen Wert zu erhalten, wie er später im Datensatz gespeichert wird: ''Math.round(value)'' **Hinweis:** Während der Bedienung des Schiebereglers wird intern mit einer Dezimalzahl gearbeitet, denn der Schieberegler bewegt sich ja stufenlos, wenn eine Differenzierung größer als 20 eingestellt ist. Für die Ausgabe muss dieser Wert (''value'') evtl. auf eine Ganzzahl gerundet werden, um den gleichen Wert zu erhalten, wie er später im Datensatz gespeichert wird: ''Math.round(value)''
  
  
-==== Beispiel: Euro-Beträge ====+==== Basis-Script ====
  
-Der folgende HTML-/JavaScript-Code transformiert den Wertebereich 1-101 auf 0-20rundet auf ganze Zahlen und zeigt ein Euro-Zeichen hinter dem Wert an.+Der folgende JavaScript-Code zeigt den eingestellten Wert so an, wie er im Datensatz gespeichert wirdalso ohne Prozentzeichen und beginnend bei 1.
  
 <code javascript> <code javascript>
 var formatter = function(value, reversed) { var formatter = function(value, reversed) {
   // Nichts anzeigen, wenn ein Wert kleiner 0 (z.B. -9 = keine Antwort) vorliegt   // Nichts anzeigen, wenn ein Wert kleiner 0 (z.B. -9 = keine Antwort) vorliegt
-  if (value < 0) return ""; +  if (value < 0) 
-  // Den Wert von 1-101 auf 0-100 transformieren (minus 1) und runden mittels Math.round(), +    return ""; 
-  // dann auf den Bereich 0-1 (dividiert durch 100), +  } 
-  // dann auf den Bereich 0-20 (multipliziert mit 20) und +  // Den Wert runden und als Texte zur Anzeige zurückgeben 
-  // Zuletzt noch ein Leerzeichen und Eurozeichen ergänzen (plus " €") +  return String(Math.round(value));
-  return String(Math.round((value - 1/ 100 * 20)) + " €";+
 } }
 +
 +// Die oben definierte Funktion für alle Schieberegler auf der Seite verwenden
 SoSciSliders.setFormat(formatter); SoSciSliders.setFormat(formatter);
 </code> </code>
  
-Es gibt unterschiedliche Möglichkeiten, den JavaScript-Code zu platzieren. 
  
-   * Am komfortabelsten ist das Eingabefeld //JavaScript-Code// unter //Weitere Einstellungen// -> //zusätzlicher Code// direkt in der Schieberegler-Frage. Dort wird das umgebende ''<script>'' weggelassen und mit ''%%s2["%q.id%"].setFormat(formatter);%%'' kann man die Funktion direkt an die Schieberegler der Frage binden.+==== Einbindung des JavaScript-Codes ==== 
 + 
 +Es gibt unterschiedliche Möglichkeiten, den JavaScript-Code zu platzieren. Lesen Sie dazu auch mehr in der Anleitung [[:de:create:javascript]]. 
 + 
 +   * Am komfortabelsten ist das Eingabefeld //JavaScript-Code// unter //Weitere Einstellungen// -> //zusätzlicher Code// direkt in der Schieberegler-Frage. Dort wird das umgebende ''<script>'' weggelassen und mit ''%%s2["%q.id%"].setFormat(formatter);%%'' kann man die Funktion direkt an die Schieberegler der einzelnen Frage binden.
    * Sie können den Code als Textbaustein speichern und beim **Fragebogen zusammenstellen** in die Fragebogen-Seite ziehen oder    * Sie können den Code als Textbaustein speichern und beim **Fragebogen zusammenstellen** in die Fragebogen-Seite ziehen oder
    * direkt mit einem //HTML-Code// Element auf der Seite platzieren. Der Code muss dabei __unter__ der Frage auf der Seite platziert werden.    * direkt mit einem //HTML-Code// Element auf der Seite platzieren. Der Code muss dabei __unter__ der Frage auf der Seite platziert werden.
Zeile 120: Zeile 124:
  
 **Tipp:** Der Name ''formatter'' für die Formatierungs-Funktion ist willkürlich gewählt. Sie können unterschiedliche Funktionen definieren, um bei unterschiedlichen Schiebereglern unterschiedliche Werte anzuzeigen. **Tipp:** Der Name ''formatter'' für die Formatierungs-Funktion ist willkürlich gewählt. Sie können unterschiedliche Funktionen definieren, um bei unterschiedlichen Schiebereglern unterschiedliche Werte anzuzeigen.
 +
 +
 +==== Beispiel: Euro-Beträge ====
 +
 +Der folgende HTML-/JavaScript-Code transformiert den Wertebereich 1-101 auf 0-20, rundet auf ganze Zahlen und zeigt ein Euro-Zeichen hinter dem Wert an.
 +
 +<code javascript>
 +var formatter = function(value, reversed) {
 +  // Nichts anzeigen, wenn ein Wert kleiner 0 (z.B. -9 = keine Antwort) vorliegt
 +  if (value < 0) return "";
 +  // Den Wert von 1-101 auf 0-100 transformieren (minus 1) und runden mittels Math.round(),
 +  // dann auf den Bereich 0-1 (dividiert durch 100),
 +  // dann auf den Bereich 0-20 (multipliziert mit 20) und
 +  // Zuletzt noch ein Leerzeichen und Eurozeichen ergänzen (plus " €")
 +  return String(Math.round((value - 1) / 100 * 20)) + " €";
 +}
 +SoSciSliders.setFormat(formatter);
 +</code>
  
  
Zeile 209: Zeile 231:
  
 <code javascript> <code javascript>
-function positioner(x, y, position, width, height, buttonIndex) { +window.addEventListener("load", function() { 
-  if (button == 0) { + 
-    return { +    // Erste Funktion für die Beschriftung des Haupt-Reglers (Index 0, links vom Regler) 
-      x:x - width / 2, +    function positionerA(x, y, position, width, height) { 
-      y:y - 20, +        return { 
-      align:"right"+            x: x - width / 2, 
 +            y: y - 20, 
 +            align: "right" 
 +        }
     }     }
-  } else { +    s2.AB01.item(1).setDisplay(positionerA0);
-    return { +
-      x:x + width / 2, +
-      y:y - 20, +
-      align:"left" +
-    } +
-  } +
-}+
  
-SoSciSliders.setDisplay(positioner, "AB01_01");+    // Zweite Funktion für die Beschriftung des sekundären Reglers (Index 1rechts vom Regler) 
 +    function positionerB(x, y, position, width, height) { 
 +        return { 
 +            x: x + width / 2, 
 +            y: y - 20, 
 +            align: "left" 
 +        } 
 +    } 
 +    s2.AB01.item(1).setDisplay(positionerB, 1); 
 +     
 +});
 </code> </code>
  
Zeile 363: Zeile 391:
 }); });
 </code> </code>
 +
 +
 +===== Summe der Regler anzeigen =====
 +
 +Die Anzeige der aktuellen Summe aller Regeler erfordert zunächst ein HTML-Element mit einer ID, in welches man den Wert "hineinschreiben" kann. Dies kann in einem Element der Frage (Titel, Erklärung, ...) platziert werden oder als HTML-Code separat auf der Seite.
 +
 +<code html>
 +<div>
 +Die aktuelle Summe beträgt <span id="output">-</span>%.
 +</div>
 +</code>
 +
 +Der JavaScript-Code muss dann bei jeder Änderung (''%%"change"%%'') alle Regler durchgehen. Darum kümmert sich hier die Funktion `''refresh()''. Ist deren Wert eines Reglers größer als 0 (also nicht auf der "keine Angabe" Position), dann wird der Wert in die Summe aufgenommen. Im folgenden Code wird der Wert zunäcsht gerundet (Schieberegler können auch nicht-ganzzahlige Werte liefern) und jeweils noch 1 subtrahiert, weil der Wertebereich hier von 1 bis 101 geht, diese Werte aber für 0 bis 100 % stehen.
 +
 +<code javascript>
 +window.addEventListener("load", function() {
 +    var slider = s2.SR01;
 +    var items = slider.items;
 +
 +    function refresh() {
 +        var sum = 0;
 +        for (var key in items) {
 +            var value = items[key].value;
 +            if (value > 0) {
 +                sum+= Math.round(value) - 1;
 +            }
 +        }
 +        document.getElementById("output").innerHTML = sum;
 +    }
 +
 +    for (var key in items) {
 +        items[key].addEventListener("change", refresh);
 +    }
 +    refresh();
 +});
 +</code>
 +
 +===== Summe der Regler prüfen =====
 +
 +In der Schieberegler-Frage kann eingestellt werden, dass die Regler-Summe begrenzt oder fixiert wird -- wobei SoSci Survey im zweiten Fall die restlichen Regler bewegt, damit die Summe stimmt.
 +
 +Falls Sie einfach nur prüfen möchten, ob die Summe der Regler einem bestimmten Wert entspricht, können Sie eine [[:de:create:checks-php]] verwenden. Beachten Sie dabei zwei Dinge:
 +
 +  - Wenn ein Regler noch nicht bewegt wurde, speichert er einen negativen Antwortcode.
 +  - In der Null-Position speichert der Schiebereger den Antwortcode 1.
 +
 +Für das Aufsummieren müssen also negative Codes und ggf. eine Verschiebung um -1 beachtet werden. Der PHP-Code für die Überprüfung könnte wie folgt aussehen. Dieses Beispiel geht davon aus, dass der Schieberegler die Kennung ''SL01'' trägt, und dass Sie für die Fehlermeldung im Fragebogen einen Text mit der Kennung ''ER01'' angelegt haben.
 +
 +<code php>
 +// Summe ermitteln
 +$sum = 0;
 +foreach (valueList('SL01') as $value) {
 +    if ($value > 0) {
 +        $sum+= $value - 1;
 +    }
 +}
 +// Prüfung der korrekte Summe
 +if ($sum != 100) {
 +    repeatPage('ER01');
 +}
 +</code>
 +
  
 ===== Literatur ===== ===== Literatur =====
  
 Funke, Frederik. (2010). Internet-based measurement with visual analogue scales: An experimental investigation (Internetbasierte Messungen mit visuellen Analogskalen: Eine experimentelle Untersuchung). Dissertation. [[http://frederikfunke.net/dissertation/Funke_%282010%29_Internet-based_measurement_with_visual_analogue_scales-Dissertation.pdf|Online verfügbar]] Funke, Frederik. (2010). Internet-based measurement with visual analogue scales: An experimental investigation (Internetbasierte Messungen mit visuellen Analogskalen: Eine experimentelle Untersuchung). Dissertation. [[http://frederikfunke.net/dissertation/Funke_%282010%29_Internet-based_measurement_with_visual_analogue_scales-Dissertation.pdf|Online verfügbar]]
de/create/questions/slider.1649955324.txt.gz · Zuletzt geändert: 14.04.2022 18:55 von admin
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki