Sven Rautenberg: Was ist daran falsch?

Beitrag lesen

Aloha!

Du mußt die Zeichen innerhalt der Zeichenkette escapen.

Richtiger Gedanke, falsche Ausführung.

So wird der Code im Javascript wohl drinstehen:
document.write("<input size='4' maxlength='4' value='1' name='text2' onFocus='window.setTimeout('alert(this.value*5)',12000);'>");

Das erzeugt folgende Ausgabe:

<input size='4' maxlength='4' value='1' name='text2' onFocus='window.setTimeout('alert(this.value*5)',12000);'>

Die escapten einfachen Anführungszeichen kriegen die Backslashes weg und stehen wieder alleine da - und immer noch ist das Problem, dass sich die Anführungszeichen beißen.

Das Ausgabeergebnis muss so aussehen:
<input size="4" maxlength="4" value="1" name="text2" onFocus="window.setTimeout('alert(this.value*5)',12000);">

oder so:
<input size='4' maxlength='4' value='1' name='text2' onFocus='window.setTimeout("alert(this.value*5)",12000);'>

Folglich kann man es auf diese Arten schreiben:
document.write("<input size='4' maxlength='4' value='1' name='text2' onFocus='window.setTimeout("alert(this.value*5)",12000);'>");
document.write('<input size='4' maxlength='4' value='1' name='text2' onFocus='window.setTimeout("alert(this.value*5)",12000);'>');
document.write("<input size="4" maxlength="4" value="1" name="text2" onFocus="window.setTimeout('alert(this.value*5)',12000);">");
document.write('<input size="4" maxlength="4" value="1" name="text2" onFocus="window.setTimeout('alert(this.value*5)',12000);">');

...je nachdem, wieviel Aufwand man mit dem Escapen haben will...

Es empfiehlt sich übrigens, eine einheitliche Handhabung der Anführungsstriche zu haben. Ich benutze grundsätzlich doppelte Anführungszeichen zum Umschließen von HTML-Attributen und logischerweise dann einfache Anführungszeichen für Strings innerhalb von Javascript-Eventhandlern. Dadurch sehen die Javascript-Befehle weniger "buschig" aus, sind IMO klarer durchgehend zu lesen.

- Sven Rautenberg