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 Support- Team,
ich wollte Zahlen aus 5 Feldern (Lückentext) in einem 6. Feld direkt aufsummieren lassen.
Dazu habe ich mich an einer Javascript Vorlage orientiert, die ich hier im Forum gefunden habe. In der Konsole wird mir ausgegebn "no Event attachted" bzw, die Funktion wird nie aufgerufen.
Hier mal das Skript. (Zum Test hier nur mal für ein Textfeld)
Haben Sie eine Ahnung wo der Fehler liegen könnten?
Für Hilfe wäre ich sehr dankbar.
Liebe Grüße
ifp

<!--
var textfeldA = document.getElementById("EN13_01");  // offene Texteingabe anderer Inhalt
var textfeldB = document.getElementById("EN13_02"); 
var textfeldC = document.getElementById("EN13_03"); 
var textfeldD = document.getElementById("EN13_04"); 
var textfeldE = document.getElementById("En13_06"); 

var Summe = document.getElementById("EN13_07");  // Frage anderer Inhalt...kommt vor

console.log(textfeldA);
console.log(textfeldA.value);

function toogleText() {
console.log(textfeldE);
console.log(textfeldE.value);
	Summe.value= textfeldA.value+textfeldB.value+textfeldC.value+textfeldD.value+textfeldF.value
}

// Die Funktion soll jedesmal ausgeführt werden, wenn das Textfeld ausgefüllt wird
SoSciTools.attachEvent(textfeldE, "onkeyup", toogleText);

// Und jetzt gleich soll sie auch ausgeführt werden, damit die Anzeige zu Beginn korrekt ist
toogleText();
// -->
</script>
in SoSci Survey (dt.) by s046186 (110 points)

1 Answer

0 votes

Die Lösung ist genauso trivial wie gut versteckt: Vor dem Namen des Ereignisses darf kein "on" stehen:

SoSciTools.attachEvent(textfeldE, "keyup", toogleText);
by SoSci Survey (84.5k points)
Im Moment zeigt die Fehlerkonsole folgenden Fehler:

SyntaxError: expected expression, got keyword 'var'[Weitere Informationen]

Und bezieht sich auf folgende Zeile, die in Ihrer ursprünglichen Frage eigentlich mal korrekt (ohne var) stand:

document.setElementById("EN13_07") = var textfeldA+var textfeldB+var textfeldC+var textfeldD+var textfeldE;

Korrekt wäre:

document.getElementById("EN13_07").value = textfeldA.value + textfeldB.value + textfeldC.value + textfeldD.value + textfeldE.value;

Und vermutlich müsste man die Texte erst noch in Zahlen umwandeln (also "1" -> 1), das würde dann wie folgt aussehen:

document.getElementById("EN13_07").value = parseInt(textfeldA.value) + parseInt(textfeldB.value) + parseInt(textfeldC.value) + parseInt(textfeldD.value) + parseInt(textfeldE.value);

Anschließend kann ich gerne nach weiteren Probleme sehen. Entsprechend muss die Funktion natürlich auch in toogleText() geändert werden.
In Ordnung. Nun steht da wieder:

TypeError: textfeldA is null

Die Lösung ist dank des Pretest-Links ganz einfach: Das JavaScript muss unter (!) der Frage EN13 platziert werden, nicht darüber. Wenn das Script ausgeführt wird, muss die Frage bereits auf der Seite vorliegen.
Vielen Dank!! Das war Fehler
Jetzt funktioniert es , aber leider nur wenn in allen Feldern eine Zahl steht.
Theoretisch könnte aber auch nur in einem Feld etwas stehen. Gibt es dafür evtl. auch eine Lösung?
Am einfachsten schreiben Sie eine kleine Funktion, die auf das Argument erst parseInt() aufruf - und wenn es keine Zahl ist - isNaN() - dann geben Sie 0 zurück. In der eigentlichen Summen-Zeile ersetzen Sie dann parseInt() durch diese Funktion.
...