0 votes
in SoSci Survey (dt.) by s014016 (360 points)

Hallo,

per JavaScript setze ich die Eingaben einzelner Fragen unter einer bestimmten Bedingung zurück.
Das klappt gut, nur bei den Markierungen der Grafischen Positionierung nicht.
Wenn ich das richtig sehe, sind das Textfelder, in denen die Daten gespeichert werden.
Das bedeutet, dass ich das über

var text1 = document.getElementById("TO01_pts"); 
var text2 = document.getElementById("TO01_rgs");  
var text3 = document.getElementById("TO01_01");  
var text4 = document.getElementById("TO01_01x01");  

und

    text1.value="";
    text2.value="";
    text3.value="";
    text4.value="";

zurücksetzen lassen kann.

Aber leider funktioniert es nicht - die Markierungen bleiben.
Wo liegt der Fehler?
Vielen Dank für die Hilfe!

by SoSci Survey (305k points)
> Wo liegt der Fehler?

Kein Fehler im engeren Sinne ... nur bekommt der Teil, welcher sich um die Visualisierung kümmert, einfach nicht mit, dass sich da etwas an den Daten geändert hat.

Ich suche mal im Quellcode, ob man die Frage auf einfachem Wege über die Änderung informieren kann.

1 Answer

0 votes
by SoSci Survey (305k points)

Bitte rufen Sie nach dem (Zurück-)Setzen der Datenfelder einmal die init()-Funktion des Javascript-Objekts auf, welches für die grafischen Positionierung zuständig ist:

text1.value="";
text2.value="";
text3.value="";
text4.value="";
markerTO01.init();
by s014016 (360 points)
Guten Morgen.

Leider hat es keinen Erfolg - also jedenfalls keinen reproduzierbaren Erfolg,
denn von ca. 5 Versuchen, wurden die Werte nur einmal zurückgesetzt,
was dann nicht mehr wieder...

Alles ausprobiert:
* Bedingung gleich wieder geändert ohne auf die nächste Seite zugehen
* erst auf die nächste Seite gegangen, dann zurück und Bedingung geändert

Woran könnte das liegen?
by SoSci Survey (305k points)
Sie müssen noch die korrekten HTML-IDs im JavaScript-Code angeben. Ein Eingabefeld mit der Kennung TO01_pts gibt es da nicht, aber eines mit TO01. Und auch nur dieses müssen Sie zurücksetzen. Hier ein Beispiel-Code:

<button type="button" id="testButton">Reset</button>

<script type="text/javascript">
var btn = document.getElementById("testButton");
btn.addEventListener("click", function() {
    document.getElementById("TO01").value = "";
    markerTO01.init();
});
</script>
by s014016 (360 points)
Also ich bekomme das leider nicht hin.
In Ihrem Beispiel übernimmt der Button ja das zurücksetzen, in meinem JavaScript ist das es in die Funktion Toogle() eingebaut und wird ausgelöst, wenn eine Option zutrifft.
Und ich komme, egal welche Veränderungen ich in dem Script vornehme nicht zum Ziel.
Ich habe auch über die Konsole noch einmal die HTML-ID überprüft - die stimmt so.

Hier mal die gekürzte Version meines Skriptes (ohne die Items bei denen es klappt):

<script type="text/javascript">
<!--
var optionJ = document.getElementById("PA06_1001");  

var frage = document.getElementById("blockPainJa");

var text1 = document.getElementById("TO01_pts");
var text2 = document.getElementById("TO01_rgs");  
var text3 = document.getElementById("TO01_01");  
var text4 = document.getElementById("TO01_01x01");  

function toogle() {
   
  if (optionJ.checked ) {
   
    frage.style.display = "";

  } else {
  
    frage.style.display = "none";

    text1.value="";
    text2.value="";
    text3.value="";
    text4.value="";
    document.getElementById("TO01").value = "";
    markerTO01.init();
  }
}
 
SoSciTools.attachEvent(optionJ, "click", toogle);
toogle();

</script>
by SoSci Survey (305k points)
> Ich habe auch über die Konsole noch einmal die HTML-ID überprüft - die stimmt so.

Posten Sie gerne eine Pretest-Link direkt (!) zur betroffenen Seite im Fragebogen, dann kann ich mir das direkt ansehen.

Beachten Sie auch, dass das initiale toogle() wahrscheinlich einen Fehler wirft, weil die Variable markerTO01 in diesem Moment noch gar nicht definiert wurde. Es müsste daher am Ende heißen:

SoSciTools.attachEvent(optionJ, "click", toogle);
window.addEventListener("load", toogle);
by s014016 (360 points)
Leider bringt auch das geänderte Ende nichts.

Hier der Link : https://sozmed.charite.de/TP_SB/?act=oC3fjqYZ2weOh4iVnX1xGGCY

Vielen Dank.
by SoSci Survey (305k points)
Die Fehlerkonsole im Browser sagt mir bei Aufruf des Links:

> Uncaught TypeError: optionP1 is null

Das stammt aus der Zeile

> optionP1.checked=false;

.. und könnte dazu führen, dass der Rest der Scripte auf der Seite nicht oder nur teilweise ausgeführt wird.

Wenn ich in der Browser-Konsole die folgenden Befehle ausführe, werden die Markierung aus TO01 gelöscht.

document.getElementById("TO01").value = "";
markerTO01.init();

Demnach liegt das Problem darin, dass Ihr Script gar nicht bis zu dieser Stelle kommt. Mittels console.log() im Script können Sie recht gut verfolgen, wo das Script noch läuft und wo nicht mehr.
by s014016 (360 points)
Ach wie blöd... Ich habe einen Teil des Fragebogens auskommentiert, damit es etwas übersichtlicher ist für Sie, habe allerdings den JavaScript Code nicht geändert...
Daher kann der auch optionP1 nicht finden.

Versuche noch mal über die Konsole etwas weiter zu kommen...

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

...