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

Hallo,

ich habe pro Seite zwischen einem und zehn Buttons. Ich würde gerne zählen, wie oft ein Teilnehmer auf einen Button klickt. Dabei muss nicht gezählt werden, welcher Button wie oft geklickt wird, sondern nur die Anzahl der Klicks auf Buttons im Allgemeinen. Dafür habe ich erstmal allen Buttons die gemeinsame id "counter" geben. Den Counter selbst habe ich ins Layout gepackt.

  <script>
    var count=0
    
    document.getElementById("counter").onclick=function(){
    count=count+1; 
     }
    
    // Das versteckte Eingabefeld identifizieren
    var input = document.getElementById("XX20_01");
     
    // Den Wert hineinschreiben
    input.value = count;
    
    </script>

Muss ich irgendwo noch prepare_input(); einfügen? und wenn ja, reicht es aus, das im Layout zu machen?

Viele Grüße

in SoSci Survey (dt.) by s109993 (3.9k points)

1 Answer

0 votes

Ich würde dringend empfehlen, dass Sie zumidnest pro Seite zählen. Denn wenn Sie bei der Auswertung plötzlich vor unerklärlichen Werten stehen, sind Sie froh um ein wenig Differenzierung.

Aber im Ihre Frage zu beantworten: Wenn Sie weiterzählen möchten (das ist z.B. auch sinnvoll, wenn eine Seite wegen unbeantworteter Fragen oder Zurück-Knopf zweimal besucht werden kann), dann sollten Sie den Wert im versteckten Eingabefeld XX20_01 zunächst auslesen.

Sie können sich dabei z.B. an folgender Anleitung orientieren:
Wechsel des Browserfensters aufzeichnen

by SoSci Survey (193k points)
Das ist ein sehr guter Hinweis und ich werde es wahrscheinlich auch so umsetzen. Trotzdem die Frage: gibt es die Möglichkeit einer Umsetzung über das Layout? Der Fragebogen ist sehr lang und schon sehr voll (mit ver. Scipten, Filtern etc..) Zwei weitere Felder pro Seite würden die Übersichtlichkeit noch erschweren.
Pardon, das mit dem Layout hatte ich überlesen.

Ausschließlich mit dem Layout wird es nicht funktionieren, denn Sie müssen das versteckte Eingabefeld der internen Variable in die Seite einbinden. Das ist nur möglich, indem Sie die entsprechende Frage in den Fragebogen ziehen oder mittels question() einbinden.

Aber es geht natürlich übersichtlicher. Und zwar können Sie unter "Fragebogen zusammenstellen" im Karteireiter "PHP-Funktionen" eine Funktion definieren, die mittels question() die Frage oder auch nur ein Item (eine Variable) davon einbindet und darunter gleich den passenden JavaScript-Code aus einem Textbaustein. Wenn Sie show() verwenden, könnten Sie sogar die Kennung für jede Seite bequem anpassen, sodass Sie unterschiedliche Variablen hätten.

Auf der Seite selbst würden Sie dann nur ein Element "PHP-Code" mit Aufruf der Funktion unterbringen. Das ist übersichtlich und man kann schnell etwas ändern. Wenn Sie pro Seite messen möchten, dann können Sie der Funktion einfach die Seitennummer übergeben.
Hallo Herr Leiner,

ich habe ein kleines/großes Problem bezüglich dieser Frage. Bei meinem Test auf einer Seite hatte ich keine Probleme, wenn ich aber auf das php Script über mehrere Seiten Zugreife, bekomme ich Fehlermeldungen:
1) Items of the following question have been used repeatedly on this page. This inevitably results in data loss! If you need the same question more than once, please create a copy of this question. The following items are duplicates: XX09_01, [Liste aller Items dieser Variable]

2)One or more variables (XX09_01, [Liste aller Items dieser Variable]) have already been asked on page 46.

Ich habe am Anfang jeder Seite das php Script verlinkt (am Anfang)
<?
function()
?>

und am Ende der Seite das Item

<script>
blurCount("X009_32");
</script>

Ich denke es liegt daran, das ich im php Script question('XX09'); habe. Das legt ja dann alle Items der Variable auf der Seite an...

Das php Script:
function awesome() {

question('XX09');


html('

<script type="text/javascript">

function blurCount(inputID) {
  var input = document.getElementById(inputID);
  if (!input) {
    alert("Fehler: Interne Variable " + inputID + " ist auf der Seite nicht verfügbar!");
    return;
  }
 
  // Initialisierung (Wert: 0)
  if (isNaN(parseInt(input.value))) {
    input.value = 0;
  }
 
  // Funktion, die beim Verlassen des Fenster aufgerufen wird
  function countBlur(evt) {
    var val = parseInt(input.value);
    input.value = val + 1;
  }

  // Zählung für jedes Verlassen des Fensters aktivieren
 
var bttn = document.getElementsByClassName("counter");
 
 for(var i = 0; i < bttn.length; i++) {
      bttn[i].addEventListener("click",  countBlur)
  }

}

</script>

');

}
> Items of the following question have been used repeatedly on this page.

Meine Vermutung wäre, dass Sie entweder die Frage XX09 nochmal manuell in die Seite gezogen haben - also zusätzlich zum question('XX09') - oder dass Sie eine Seite wegen der Filterführung überspringen und deshalb die Funktion doppelt eingebunden wird.

Letzteres sollten Sie in der Debug-Information direkt nachvollziehen können. Den JavaScript-Code sollten Sie auch nicht in den PHP-Code schreiben, sondern in einen separaten Text. Das macht es übersichtlicher und reduziert das Risiko für Fehler.
hm... da habe ich Sie am Anfang wohl missverstanden (bzw. den Wiki Eintrag falsch interpretiert).
Es scheint aber ein größeres Problem mit den php- Filtern zu geben. Wenn mehrere Seiten durch einen Filter übersprungen werden, wird bei der nächsten Seite mehrmals eingebunden (ist mir tatsächlich erst aufgefallen, nachdem Sie das angesprochen haben). Gibt es da für eine Lösung oder dürften einfach keine php-Filter auftauchen?
Wahrscheinlich würde es schon reichen, wenn Sie Ihre Funktion erst unter dem Filter aufrufen. Wenn der Filter auf die nächste Seite springt, bevor die Funktion aufgerufen wird, dann wird sie ja auf der (übersprungenen) Seite nicht aufgerufen.
...