Text in Textarea einfügen
Bernhard
- javascript
Hallo,
ich möchte realisieren, daß der Benutzer im prompt nur den Namen des Bildes einfügt und somit mit Javascript automatisch eine HTML Verknüpfung eingetragen wird in die Textarea neben den Text. Somit kann ich dann, Bilder neben den CGI erzeugten Text darstellen. Irgendwie gelingt mir das aber nicht mit meinem Script,
für Hilfe bin ich sehr dankbar!
Hier meine Seite:
<html>
<head>
<title>Neuer Eintrag</title>
<link rel=stylesheet href="standard.css">
<style type="text/css">
<!--
body { font-family:Arial,Helvetica; }
td { font-size:10pt }
td.u { font-size:10pt;font-weight:bold;background-color:#FF9E00 }
td.g { font-size:10pt;font-weight:bold;font-size:12pt }
td.b { font-size:8pt;font-weight:bold;background-color:#FF9E00 }
td.h { background-color:#FF9E00 }
-->
</style>
<script language = "JavaScript">
<!--
function Focus()
{
window.document.Eingabe.Datum.focus();
}
function Loeschen()
{
document.Eingabe.reset();
document.Eingabe.Datum.focus();
}
function Schliessen()
{
if (document.Eingabe.Datum.value == '' document.Eingabe.Name.value == '' document.Eingabe.Eintrag.value == '')
{
alert('\Es wurden nicht alle Felder ausgefüllt !');
document.Eingabe.Datum.focus();
return false;
}
else
{
window.document.Eingabe.submit();
}
}
function neu()
{
window.open("main.htm","mitte");
}
function bild()
{
name=prompt("Bitte geben Sie den Namen des Bildes ein:" ,"Bildname");
ausgabe=("<img src="../../proddoc-pd/b/"+ name + """);
window.document.Eingabe.Eintrag.open();
window.document.Eingabe.Eintrag.value=ausgabe;
// window.document.write("Hello World...");
window.document.Eingabe.Eintrag.close();
}
//-->
</script>
</head>
<body text="#000000" bgcolor="#6B6D6B" link="#FF0000" alink="#FF0000" vlink="#FF0000" onLoad="Focus()">
<table border=0 cellspacing=1 bgcolor=#6B6D6B align="center" width=450 height=400>
<tr>
<td class=g border=0 align=center colspan=2 bgcolor=#FFBE00 valign=middle height=30>Bitte tragen Sie Ihre Nachricht ein</td>
</tr>
<form name="Eingabe" method="get" action="/cgi-bin/proddoc-pd/script1.cgi" onSubmit="window.close()">
<tr>
<td class=u align=>Datum:</td>
<td class=h><input name="Datum" tabindex=0 type=text size=20 maxlength=10 ></td>
</tr><tr>
<td class=u align=>Name:</td>
<td class=h ><input name="Name" tabindex=1 type=text size=20 maxlength=35></td>
</tr>
<tr>
<td rowspan=2 class=u valign=top align=>Eintrag:</td>
<td class="h"><textarea tabindex=3 wrap=physical cols=35 rows=16 name="Eintrag"></textarea></td>
</tr>
<tr>
<td class="b"><input tabindex=4 type="button" name="Abschicken" value="Abschicken" onClick="Schliessen()"><input tabindex=5 type="button" name"Loeschen" value="Löschen" onClick="Loeschen()"><input tabindex=6 type="button" name"Verwerfen" value="Verwerfen" onClick="neu()"><input tabindex=7 type="button" name"bild" value="Bild einfügen" onClick="bild()"></td>
</tr>
</form>
</table>
</td>
</tr>
</table>
</body>
</html>
Mit window.document.Eingabe.Eintrag.write(ausgabe);
funktioniert es auch nicht.
Danke
BK
Hi Bernhard
Du hast wohl ein bischen die Sache mit den Layern und den Formularen durcheinandergebracht.
Bei Layern geschieht dynamisches ueberschreiben in Netscape immer mit
document.layername.open();
document.layername.write("Wasauchimmer");
document.layername.close();
In Formularen wir einfach nur ein Wert zugeordnet.
Also einfach nur: window.document.Eingabe.Eintrag.value=ausgabe;
Du hast ausserdem in der Funktion bild noch ein > vergessen. des weiteren wuerde ich an deiner Stelle
window.document.Eingabe.Eintrag.value+=ausgabe schreiben, da sonst immer die gesamte Textarea ueberschrieben wird.
So nun die ganze Funktion bild()
function bild()
{
name=prompt("Bitte geben Sie den Namen des Bildes ein:" ,"Bildname");
ausgabe=("<img src="../../proddoc-pd/b/"+ name + "">");
window.document.Eingabe.Eintrag.value+=ausgabe;
}
Ausserdem wurde in der Funktion schliessen() noch ein Fehler angezeigt
(Function does not always return a value) Wenn du am ende der else Schleife noch ein return true eingibst dann klappt alles
viele Gruesse Holger
Peinlicher Fehler beim Kommentar zu layern. Es muss heissen:
document.layername.document.open();
document.layername.document.write("Wasauchimmer");
document.layername.document.close();
So das wird jetzt aber stimmen.
Holger
Hallo Holger,
Vielen Dank für Deine Hilfe
ECHT SUPER !!!!
Doch ich habe noch ein Problem, sonst funktionierts prächtig,
wenn ich in Prompt den Bildnamen samt Endung zB. (test.jpg oder bild.gif) eingebe, dann funktioniert es nicht. Die Endung ist aber nötig, ga es sich um gifs und jpegs handelt.
Ich verstehe es überhaupt nicht warum es nicht funktioniert.
So nun die ganze Funktion bild()
function bild()
{
name=prompt("Bitte geben Sie den Namen des Bildes ein:" ,"Bildname");
ausgabe=("<img src="../../proddoc-pd/b/"+ name + "">");
window.document.Eingabe.Eintrag.value+=ausgabe;
}
Danke
BK
Hi Bernhard
Du hast einen weiteren Fehler gemacht, der mit uebrigens auch schon haeufiger mal passiert ist: Du hast einen Variablennamen definiert der schon existiert, naemlich der Variablennane name!! Der ist fuer den Fensternamen reserviert. Deshalb wird durch
name=prompt("Bitte geben Sie den Namen des Bildes ein:" ,"Bildname"); der Fenstername neu definiert und im Fensternamen darf kein Punkt vorkommen!!.
Loesung: einfach name in bildname umbenennen, dann stimmts.
Also:
function bild()
{
bildname=prompt("Bitte geben Sie den Namen des Bildes ein:" ,"Bildname");
ausgabe=("<img src="../../proddoc-pd/b/"+ bildname + "">");
window.document.Eingabe.Eintrag.value+=ausgabe;
}
Tschau Holger
Hallo Holger,
ich möchte mich noch einmal bedanken, Deine Tips waren einfach klasse. Es scheint Du bist auf dem Gebiet ganz schön fit!
Tja, meistens sind es Kleinigkeiten, doch die machen es aus.
Vielleicht kennst Du ein Editor für JavaScript der bei der Fehlersuche hilft?
Nun ich wünsche Dir einen schönen Abend und nochmal DANKE.
Ciao
Bernhard
Hi Holger
Loesung: einfach name in bildname umbenennen, dann stimmts.
Alternativvorschlag: Die Variable ordentlich deklarieren, sodass es eine lokale Variable der Funktion wird.
Also:
function bild() {
var name;
name = prompt ...
...
}
Durch das voranstellen von "var" wird diese Variable funktionslokal deklariert. Sie hat jetzt Vorrang vor der globalen window.name. Auf letztere kann aber weiterhin ueber window.name zugegriffen werden, falls das noetig ist. Nach Verlassen der Funktion ist diese lokale Variable vergessen, man greift dann ueber "name" also wieder auf window.name zu. Falls man den Rueckgabewert des prompt()-Aufrufs also auch ausserhalb der Funktion braucht, kann man diese Vorgehensweise nicht verwenden. (Aber das ist ja hier nicht der Fall, wenn ich das richtig ueberblickt habe.)
Calocybe