0 votes
in SoSci Survey (dt.) by s046186 (215 points)

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>

1 Answer

0 votes
by SoSci Survey (302k points)

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

SoSciTools.attachEvent(textfeldE, "keyup", toogleText);
by s046186 (215 points)
Vielen Dank für die schnelle Antwort. leider bekomme ich immer noch die Meldung:
0 index.php:57:1
Error: No element specified for SoSciTools.attachEvent()
 SoSciTools.min.js:2:52
Kann es damit zusammenhängen, dass "Lückentext" hier das falsche Frageformat ist?
Liebe Grüße
by SoSci Survey (302k points)
Ich denke, es liegt eher am kleinen "n" in der folgenden Zeile, sodass sie Kennung nicht mehr stimmt und deshalb das Element nicht gefunden wird:

var textfeldE = document.getElementById("En13_06");
by s046186 (215 points)
Danke für Ihre Mühen, leider bleibt die Fehlermeldung unverändert und das Skript startet nicht. Hätten Sie evtl noche eine Idee?
by SoSci Survey (302k points)
Nun, naheliegend wäre noch, dass es EN13_05 (statt 06) heißen müsste. Aber fü eine genauere Antwort müssten Sie bitte einen Vorschau-Link direkt (!) zur betroffenen Seite schicken.
by s046186 (215 points)
Vielen Dank für Ihre Geduld!
EN_05 ist ein Textfeld für Text, also für die Summenbildung nicht relevant
Hier der Link zur Seite
https://www.soscisurvey.de/PQB-Ende/?q=Nichtteilnahme&admin&page=4&l=ger
by SoSci Survey (302k points)
Bitte einen Vorschau-Link (s. https://www.soscisurvey.de/help/doku.php/de:survey:pretest) direkt zur betroffenen Seite ... den o.g. Link können nur Sie öffnen - und auch nur, solange Sie eingeloggt sind :)
by SoSci Survey (302k 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.
by SoSci Survey (302k points)
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.
by s046186 (215 points)
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?
by SoSci Survey (302k points)
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.

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

...