0 votes
in Datenauswertung by s337178 (110 points)

Guten Abend zusammen,

Situation: Für ein Projekt versuche ich einen simplen HTML Code mit Input Feldern (radio button, textarea). Ziel ist, dass Teilnehmer*innen Stern-Bewertungen und Reviews abgeben.
Ich orientiere mich hierbei an der Anleitung Eigene Formularelemente verwenden (https://www.soscisurvey.de/help/doku.php/de:create:inputs-custom) aber komme nicht weiter.

Aktueller HTML Textbaustein:

<script type="text/javascript">
    function changeRating(){
        //simpler Code der Sterne korrekt färbt
        }
    }
</script>
<style>
    //CSS Stuff
</style>

<p class="prompt">Here comes the prompt!</p>
<div class="gridBox">
    <div>
        <h1 class="">Name of the Place</h1>
        <img class="exampleImg" src="">
        <p class="srcInd">image source indication</p>
    </div>
    <div class="inputArea">
        <h2>Your Review:</h2>
        <div class="rate" onchange="changeRating()">
            <input type="radio" id="star1" name="rating" value="1"><label for="star1" title="text">★</label>
            <input type="radio" id="star2" name="rating" value="2"><label for="star2" title="text">★</label>
            <input type="radio" id="star3" name="rating" value="3"><label for="star3" title="text">★</label>
            <input type="radio" id="star4" name="rating" value="4"><label for="star4" title="text">★</label>
            <input type="radio" id="star5" name="rating" value="5"><label for="star5" title="text">★</label>
        </div>
        <textarea id="text" name="text" col="50" row="4"></textarea>
    </div>
</div>

Interne Variabeln: B003_01 und B003_02

Fragebogen:
PHP

question('B003', '1, 2');

Textbaustein
HTML Code

<script type="text/javascript">
    document.getElementById("B003_01").value = document.querySelector('input[name = "rating"]:checked').value;
    document.getElementById("B003_02").value = document.getElementById("text").value;
</script>

Problem: Variabeln werden nicht tatsächlich abgelesen (egal ob HTML Code über oder unter dem Textbaustien plaziert ist). Das erstaunt mich an sich nicht weiter, da der Code ja nicht erst abgerufen wird, wenn der User gerne weiterfahren möchte.

Frage: Wie verknüpfe ich meine HTML Variabeln korrekt mit den intern Variabeln?

Zusätzliche Frage: Was ist der PHP Code um bei fehlen der Variabeln auf der Seite zu bleiben und eine Warnung zu geben? (wie es ja sonst auch passieren würde, wenn Fragen als verpflichtend eingestellt sind).

Ich danke im Vorraus für jegliche Hilfe!

1 Answer

0 votes
by SoSci Survey (361k points)

Variabeln werden nicht tatsächlich abgelesen

Das hat zwei Gründe. Der eine Grund ist, dass Ihr JavaScript-Code nicht beim Abschicken ausgeführt wird, sondern nur einmalig beim Laden der Seite. Dies könnten Sie im Prinzip ändern, aber vermutlich ist ein anderes Vorgehen zielführender:

Nehmen Sie die internen Variable aus der Seite, entfernen sie den JavaScript-Code und verwenden Sie die IDs der internen Variablen direkt in Ihrem HTML-Code. Also statt

<input type="radio" id="star1" name="rating"

Würden Sie dann schreiben

<input type="radio" id="star1" name="B003_01"

Außerdem müssen Sie bitte auf der Seite noch folgenden PHP-Code einfügen:

prepare_input('B003_01');
prepare_input('B003_02');
by s337178 (110 points)
Liebes Team,

Vielen Dank für die schnelle und illustrative Antwort!
Diesen Ansatz habe ich tatsächlich auch probiert, er funktioniert jedoch nicht ausreichend da es mehrere Radio Buttons innerhalb der gleichen Gruppe gibt was zu einer entsprechenden Fehlermeldung führt.
Ich habe mal aus Interesse den Code vorgeschlagenen JS code direkt in mein HTML integriert und mit einem eigenen Button ausgelöst, jedoch funktioniert auch das nicht da der Button scheinbar eine andere Funktion automatisch triggert und zur nächsten Seite springt.
Kann es sein, dass eine solche Einbindung einfach nicht möglich ist und ich entsprechend eine etwas weniger schöne aber funktionerende Alternative mit den existierenden Question-Types bauen sollte?

Beste Grüsse
by SoSci Survey (361k points)
Radio-Buttons setzt man eigentlich immer als Gruppe ein - der Browser schickt dann jeweils nur die Information vom ausgewählten Button. Welche Fehlermeldung bekommen Sie denn?

>  da der Button scheinbar eine andere Funktion automatisch triggert und zur nächsten Seite springt.

Ohne dass ich die Seite via Pretest-Link sehe, kann ich die Ursache dieses Verhalten nur raten...
by s337178 (110 points)
Liebes Team,

Ich entschuldige mich herzlich. Ich habe die Methode mit den Variabel Namen als Input Namen + PHP "prepare" nochmals getestet und nun lief es plötzlich. Ich muss also bei meinen ursprünglichen Versuchen irgendwo zusätzliche Fehler gemacht haben.
Jetzt muss ich also nur noch via PHP einen check einbauen, dass beide Variabeln ausgefüllt werden müssen.
Vielen Dank für Ihre Hilfe und ich entschuldige mich nochmals für meinen Fehler.
by SoSci Survey (361k points)
> Jetzt muss ich also nur noch via PHP einen check einbauen, dass beide Variabeln ausgefüllt werden müssen.

An dieser Stelle wird es ein wenig anspruchsvoller - also nicht der Check, aber die Wiederholung der Seite. Denn wenn die Seite z.B. mittels repeatPage() wiederholt wird, dann ist der Input nicht mehr ausgewählt.

Sie können dieses Problem vermeiden, indem Sie die Inputs nicht per HTML-Code selbst erzeugen, sondern per Platzhalter einsetzen: https://www.soscisurvey.de/help/doku.php/de:create:inputs-single

Oder Sie können sich generell mal den Fragetyp Bild-Skala ansehen, der eine Vorlage für eine Bewertungsskala mit Sternen mitbringt.

Falls beides nicht in Ihrem Sinne ist, können wir auch mal darüber nachdenken, prepare_input() mit ein wenig JavaScript auszustatten, um einen eventuell vorhandenen Wert in die Eingabefelder zu schreiben.
by s337178 (110 points)
Liebes Team,

Danke für den Vorschlag. Ich habe mich ursprünglich mit den Platzhaltern auseinander gesetzt, jedoch finde ich, dass mir diese nicht genügen HTML Kontrolle geben um den gewünschten Effekt zu erzielen. Das Ziel der Frage ist, den Teilnehmern ein simples Review Mockup zu offerieren - die existierenden Eingabefelder haben sich da via Platzhalter einfach nicht schön genug anpassen können. Falls ich es sonst nicht schaffe, wäre das aber meine Notlösung.

Bzgl. PHP oder JavaScript Lösungen, optimalerweise wäre der "next" Button für den User temporär disabled bis beide Informationen eingetragen sind. Von den Anleitungen her habe ich jedoch nicht den Eindruck, dass das eine Option ist. Alterantiv wäre es super, wenn den Teilnehmern eine Warnung angezeit werden sollte und sie einfach auf der Seite bleiben (statt Neuladung). Meine aktuell Lösung ist jedoch einfach ein PHP check auf der nächsten Page mit:
$rating = value('B003_01');
$text = value('B003_02');
if(empty($rating) or empty($text)){
//show error message textboxes
goToPage(...);

Bei Neuladung der Seite die Daten neu einzutragen wäre also sowieso optimal, da Nutzer ja auch z.B. den "back" Button nutzen könnten. Ich bin mir auch nicht sicher, wie ich die Variabeln innerhalb des JS abrufen kann, um sie dann in das entsprechende Feld einschreiben zu können (zweiteres ist mir bewusst wie). Könnten Sie mich diesbezüglich noch einen Tipp geben?

Vielen Dank für Ihre wiederholte Hilfe!
by SoSci Survey (361k points)
Pardon, Ihre letzte Frage ist mir durchgerutscht und vermutlich inzwischen nicht mehr relevant.

Bei Fragen, die Sosci Survey selbst per JavaScript bereitstellt ist es so gelöst, dass die Information in einem oder mehrere versteckten EIngabefeldern (a) gespeichert und übermittelt und (b) beim erneuten Aufruf der seite auch wieder bereitgestellt wird. Dies entspricht der Funktion von internen Variablen, wenn diese auf eine Fragebogen-Seite gezogen werden.

Das heißt, man würde eine interne Variabel auf die Seite ziehen, das JS würde beim Laden der Seite deren Inhalt auslesen, entsprechend die individiduellen Formularelemente initialisieren und bei Änderungen direkt den Inhalt ändern.

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

...