Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

0 votes

Liebes SosciSurvey-Team

Fragen vom Typ "Auswahl" kann man ja so einstellen, dass man mit der Beantwortung der Frage auf die nächste Seite gelangt.
Gibt es solch eine Einstellung auch für Fragen vom Typ "Offene Texteingabe"? (wenn z.B. ein Zeichen eingegeben wurde, dann weiter auf die nächste Seite)
Oder müsste man das mit Javascript machen?

Vielen Dank!

in SoSci Survey (dt.) by s027767 (235 points)

1 Answer

0 votes

JavaScript kommt auch bei der Auswahl zum Einsatz - nur erledigt SoSci Survey das im Hintergrund automatisch.

Bei der offenen Texteingabe macht das automatische Weiter nur bedingt Sinn, denn die meisten Projekte möchten hier ja mehr als ein Zeichen. Und wenn man nur ein Zeichen sammelt, dann sollte man mit ein wenig JavaScript ohnehin dafür sorgen, dass das Eingabefeld gleich den Fokus erhält und der Teilnehmer direkt lostippen kann.

Das eigentliche JavaScript für das "Weiter" ist nicht kompliziert. Falls das Eingabefeld z.B. die Kennung TX01_01 hat, würde es etwa so aussehen:

var input = document.getElementById("TX01_01");
SoSciTools.attachEvent(input, "keyup", function() {
  if (input.value != "") {
    SoSciTools.submitPage();
  }
});
by SoSci Survey (56k points)
Liebes SosciSurvey Team

Vielen Dank für die Antwort.
Leider funktioniert es noch immer nicht ganz, da ich diese Funktion in Kombination mit dem Timer über mehrere Seiten verwenden möchte.

Im Fragebogenprojekt sind es acht Fragebogenseiten mit jeweils ca. 12 offenen Texteingaben. In jedes Textfeld kann immer nur ein Zeichen geschrieben werden. Der Cursor springt dann von Feld zu Feld. (Das soll die digitale "Digit-Symbol-Task" sein.)
Der Timer über mehrere Seiten funktioniert einwandfrei und auch der Cursor springt innerhalb einer Seite von Feld zu Feld. Nur das mit dem automatischen Weiter, nachdem das letzte Textfeld einer Seite beantwortet wurde (ein Zeichen), klappt noch nicht.

Den Code oben habe ich zum Timer hinzugefügt:

<script type="text/javascript">
<!--
// Funktion zur Weiterleitung
function weiter() {
  // Eine Meldung anzeigen (optional)
  alert("Die Zeit ist vorbei.");
  // Den Teilnehmer zur nächsten Seite weiterleiten
  SoSciTools.submitPage();
}

// Countdown anzeigen
var date0 = new Date();
var timeout = date0.getTime() + %remain% * 1000;
function updateCountdown() {
  // Zeit berechnen
  var date = new Date();
  var time = Math.ceil((timeout - date.getTime() - 50) / 1000);  // Verbleibende Zeit in Sekunden
  // Zeit anzeigen
  var out = document.getElementById("remain");
  if (!out) {
    return;
  }
  while (out.lastChild) {
    out.removeChild(out.lastChild);
  }
  var minutes = Math.floor(time / 60);
  var seconds = String(time - 60 * minutes);
  if (seconds.length < 2) seconds = "0" + seconds;
  var display = String(minutes) + ":" + seconds;
  var displayNode = document.createTextNode(display);
  out.appendChild(displayNode);
}


// Initialisierung der Weiterleitung
SoSciTools.attachEvent(window, "load", function(evt) {
  //Cursor
  document.getElementById("DS01_01").focus();
  // Weiter-Knopf ausblenden (optional)
  //SoSciTools.submitButtonsHide();
  // Zusätzlicher Timer für die Aktualisierung des Countdowns
  window.setInterval(updateCountdown, 1000);
  updateCountdown();
  // Timer für automatische Weiterleitung starten
  window.setTimeout(weiter, %remain% * 1000);
}
);

function jump(nr){
  if(nr<10){
    document.getElementById("DS0"+nr+"_01").focus();
  }
  else {
    document.getElementById("DS"+nr+"_01").focus();
  }
}


var input = document.getElementById("DS12_01");
SoSciTools.attachEvent(input, function() {
  if (input.value != "") {
    SoSciTools.submitPage();
  }
});



// -->
</script>

Oder müsste ich den zusätzlichen Javascript Code am Ende der Seite hinschreiben?

Herzlichen Dank nochmals für die Hilfe.
Viele Grüße
Könnten Sie das Problem bitte nochmal konkretisieren: Was genau sollte wann passieren und klappt nicht?

Bitte posten Sie auch einen Pretest-Link direkt (!) zur betroffenen Seite und falls die JavaScript-Fehlerkonsole im Browser einen Fehler zeigt, posten Sie bitte auch diesen. Danke.

> Oder müsste ich den zusätzlichen Javascript Code am Ende der Seite hinschreiben?

Der Code sollte unter dem Eingabefeld stehen, denn sonst wird der Code ausgeeführt (und will mit dem Eingabefeld arbeiten), wenn das Eingabefeld noch gar nicht existiert.
Herzlichen Dank!

Ich habe hier den Link zum Pretest auf genau die Seite:
https://www.soscisurvey.de/test129636/?act=4AWVRvR9qqi0Dq5XJKFwM40R

Das soll die "Digit Symbol Task" als Tabletversion darstellen. Dabei ordnen Teilnehmende jedem Symbol eine Zahl zu. Da die Tastatur vom Tablet einen grossen Teil des Bildschirms verdeckt, können wir immer nur einen Teil der Aufgabe zeigen, und die Personen sollen von Seite zu Seite automatisch springen - sobald sie in das letzte Textfeld einer Seite (ganz rechts) ein Zeichen (Text oder Zahl oder sonst etwas) schreiben. Den weiter-Button würde ich dann mit "buttonHide" verstecken.
Ich habe den Code, den Sie gepostet haben, ganz unten in einem HTML-Feld eingefügt, aber das automatische weiter funktioniert leider noch nicht.

Vielen, herzlichen Dank!!
Freundliche Grüße
Sie haben im HTML-Code an merheren Stelle so etwas verwendet:

<td onkeyup=jump("12")>

Das ist so nicht korrekt und wird nur in manchen Browsern funktionieren. Korrekt wäre - wenn man überhaupt ein keyup-Event bei Tabellenzellen (statt Eingabefeldern) hat:

<td onkeyup="jump('12')">

Ich empfehle, das erstmal zu entfernen oder zu korigieren, das kann ausreichen, um den Browser zu verwirren.

Und jetzt sehe ich auch den Fehler: Beim SoSciTools.attachEvent() haben Sie den zweiten Parameter (das "keyup") verschwinden lassen. Ändern Sie das wie folgt, damit die Zeile eine Funktion hat:

SoSciTools.attachEvent(input, "keyup", function() {

Eine kleine Warnung noch: Im Moment springt der Cursor bei jedem Tastendruck. Also auch, wenn man z.B. die Großschreibtaste drückt oder eine Pfeil-Links-Taste, weil man eigentlich ins vorige Feld zurück will.
...