Variablenwert in externer .js nutzen
blumentopf
- javascript
Ist es möglich, in einem externen .js-Script Variablen zu nutzen, die zuvor in der HTML Seite definiert werden?
Konkret möchte ich den Inhalt eines Elementes in der HTML-Datei auslesen, z.B. so:
meineVariable=document.getElementById("DasElement").firstChild.data;
Diese Daten sollen dann in einem über
<script src="java/externesScript.js" type="text/javascript"></script>
aktivierten Script verarbeitet werden.
Gibt es dazu eine einfache Möglichkeit? Andersherum ist es ja möglich, z.B. einen Parameter in dem externen Script definieren, und dann in der HTML zu nutzen.
Vielen Dank und Grüße
Ist es möglich, in einem externen .js-Script Variablen zu nutzen, die zuvor in der HTML Seite definiert werden?
Das kommt darauf an, wann die Filelokale Variable definiert wird, und wann das externe JS ausgeführt wird.
Konkret möchte ich den Inhalt eines Elementes in der HTML-Datei auslesen, z.B. so:
meineVariable=document.getElementById("DasElement").firstChild.data;
Diese Daten sollen dann in einem über
<script src="java/externesScript.js" type="text/javascript"></script>
aktivierten Script verarbeitet werden.
Ergo.
1. Element im HTML definieren
2. variable mit Element zuweisen
3. externes JS ausführen.
Du kannst das externe js immer noch im head verlinken, sofern du gewährleistest, dass relevante Abschnitte erst onload ausgeführt wird.
Tugendhafter ist es aber, das externe js als letztes Element im body einzubinden
mfg Beat
Hallo Beat,
ja, so funktioniert es. Ich hatte wohl irgendeinen Fehler drin, denn vorhin hat es auf scheinbar eben die Weise noch nicht getan..
Tugendhafter ist es aber, das externe js als letztes Element im body einzubinden
Das externe Script wird an einer bestimmten Stelle im Body ausgeführt, an der es eine E-Mail Adresse einfügt. Über die Variable soll der Inhalt der Mail bestimmt werden.
Besten Dank und Gruß
Ich hatte da doch noch etwas übersehen:
das Script wird beim Laden der Seite angefordert und ausgeführt, und schreibt dabei einen mailto Link mit entsprechendem "?subject="+Variable hin.
So weit so gut.
Nun bestand der Sinn davon, den subject Inhalt über eine Variable zu definieren aber eigentlich darin, Informationen, die erst später verfügbar werden, abrufen zu können. Konkret:
Durch Benutzereingabe wird eine Tabelle mit Inhalt gefüllt. Wenn der Nutzer auf den E-Mail Link klickt, soll der Tabelleninhalt bereits in die Mail geschrieben werden.
Dazu bräuchte man vermutlich eine Funktion, die beim Klick auf den Link diesen aktualisiert. Oder auch schon beim Hover. Vielleicht gibt es eine Möglichkeit, onMouseOver das script, das den Link mit dem aktuellen Variablenwert generiert, erneut auszuführen.
Ich habe versucht, das externe Script in eine Funktion umzuwandeln, und diese dann in der HTML aufzurufen:
<script src="java/externesscript.js" type="text/javascript">
EMail();
</script>
Funktioniert aber leider nicht. Wo finde ich Regeln zum Anwenden von Funktionen aus referenziertem Script?
Oder gibt es einen besseren Lösungsweg?
Dank und Gruß
das Script wird beim Laden der Seite angefordert und ausgeführt, und schreibt dabei einen mailto Link mit entsprechendem "?subject="+Variable hin.
Das kann es ja auch onclick tun, und dabei den ganzen Rest an den mailbody anhängen.
<script src="java/externesscript.js" type="text/javascript">
EMail();
</script>Funktioniert aber leider nicht. Wo finde ich Regeln zum Anwenden von Funktionen aus referenziertem Script?
Du hast folgende Aufgabe.
Am Ende des body führe das externe js aus.
dieses soll an den mailtolink zuerst einen onclick handler mit Funktionsaufruf hängen.
Eine Funktion macht dann das gewünschte:
einen onclickhandler hängst du einfach an ein Element
document.getElementById('someid').onclick
= function(){ addToMailbody };
function addToMailbody(){
//deine Funktion hier
}
mfg Beat
'someid' ist dann die id des mailtolinks? also <a id="someid" href="etc..?
Dann schreibe ich praktisch in das externe erst die bisherigen variablen Daten zur Generierung des mailto links. Dann gebe ich ihn mit write aus, und hänge hiermit: document.getElementById('someid').onclick
= function(){ addToMailbody }; den onclick Händler an.
Dieser verweist auf eine Funktion, die onclick ausgelöst wird, und an 'someid' die zusammengestellten Mailbodydaten hängt.
Habe ich das soweit richtig verstanden?
Dann hätte ich noch eine Frage: Wie ergänze ich onclick den href-Link, ohne das ganze Document zu überschreiben? Wenn write nicht onload ausgeführt wird, überschreibt es doch den übrigen Inhalt, soweit ich das verstanden habe.
oder schreibe ich in die function addtomailbody, wenn der Text bereits auf eine variable text zusammengetragen wurde und der mailto Link mit in der variablen mail zusammengefasst wurde, einfach folgendes?
document.write(mail+ "?subject=" + text);
Dann hätte ich noch eine Frage: Wie ergänze ich onclick den href-Link, ohne das ganze Document zu überschreiben?
indem du das href Attribut des Objectes ergänzt.
Einem Object und seinen Eigenschaften kann man Werte zuweisen.
mfg Beat
Hallo Beat, vielen Dank für die Ratschläge!
das externe Script sieht jetzt so aus:
e1='adresse';
e2='domain';
e3='de';
e=e1+'@'+e2+'.'+e3;
betreff="?subject=Betreff";
inhalt="&body="+Mailinhalt;
a1='<a id="mailtolink" onClick="addToMailbody()" href="mai' + 'lto:';
a2='">';
a3='</a>';
link=a1+e+betreff+inhalt+a2+e+a3;
document.write(link);
function addToMailbody(){
b1='mai' + 'lto:'
neu=b1+e+betreff+inhalt;
document.getElementById('mailtolink').href = neu;
}
Wenn ich den OnClick-Händler rausnehme, funktioniert der Link, und schreibt eine E-Mail mit dem gewünschtem Betreff und dem im HTML definierten Mailinhalt.
Auch href zu ändern funktioniert mit der Funktion addToMailbody, wenn ich damit auf eine URL verweise, z.B. so:
document.getElementById('mailtolink').href = "http://forum.de.selfhtml.org/"
Möchte ich aber, wie oben, den Link erneut als mailto-Link schreiben, funktioniert er komischerweise nicht mehr. Er wird zwar als mailto-Link erkannt, im Adressfeld von Mail erscheint allerdings folgende Adresse:
adresse@domain.de
die Sonderzeichen-Maskierung wird also nicht mehr rückübersetzt. Außerdem fehlt der Inhalt gänzlich. Kopiere ich anschließend die verlinkte E-Mailadresse mit Rechtsklick aus dem Browserfenster, erhalte ich folgenden Text:
adresse&%2364;domain&%2346;de
Woran liegt das wohl?
Dank und Gruß
Hi,
Möchte ich aber, wie oben, den Link erneut als mailto-Link schreiben, funktioniert er komischerweise nicht mehr. Er wird zwar als mailto-Link erkannt, im Adressfeld von Mail erscheint allerdings folgende Adresse:
adresse@domain.de
die Sonderzeichen-Maskierung wird also nicht mehr rückübersetzt.
Vorher hast du document.write benutzt, um damit HTML-Code ins Dokument zu schreiben.
Dabei werden nummerische Zeichen-Referenzen interpretiert.
Jetzt „arbeitest“ du aber gar nicht mehr im Kontext HTML, sondern rein auf der JavaScript-Seite - und da ist niemand involviert, der sich veranlasst sehen würde, den Zeichen &, #, 6 und 4 irgendeine besondere Bedeutung bezumessen.
Du könntest auch hier wieder zu innerHTML greifen, um deinen Link im Dokument zu platzieren - dabei wird der Text auch wieder als HTML interpretiert.
Dass das komplette Unterfangen irgendwie nach ziemlich sinnlosem Gebastel aussieht, steht auf einem anderen Blatt.
MfG ChrisB
Hallo, und vielen Dank erst noch einmal für die Ratschläge.
Meine momentane und nach ersten Tests gemäß meinen Vorstellungen funktionierende Lösung habe ich unten angefügt.
Ich verändere onClick die Eigenschaft href des Mailto Links. Dabei greife ich auf Daten aus einer Tabelle zu, die auf der Hauptseite vom Nutzer generiert wurde. Klickt der Nutzer auf den E-Mail Link, werden seine Angaben automatisch in die E-Mail übernommen, so dass er sie nicht von Hand abschreiben muss.
Also etwas, was man auch mit einem Formular lösen könnte, allerdings funktioniert es ohne CGI Service. Und davon, Formulare direkt per E-Mail zu verschicken, wird ja eindeutig abgeraten. Und wenn es bei einem System nicht funktioniert, kann es immer noch von Hand erledigt werden. Soviel zur Idee dieser Bastelei. Mag sein das es Quatsch oder ein sinnloses Unterfangen ist, aber wenn es auch auf anderem als dem meinigen Rechner so funktionieren sollte, dann finde ich es eigentlich ganz praktisch.
..und ich weiß, die stupiden Aufzählungen, derer im ungekürzten Originaltext noch mehr sind, könnte man sich wohl durch eine Schleife ersparen. War mir fürs erste aber noch zu viel Denkarbeit. Jetzt funktioniert es zumindest mal, das Kürzen kann ich dann ja noch angehen.
Variablen die hier nicht definiert werden, beziehen sich auf die Haupt-HTML.
e1='adresse';
e2='domain';
e3='de';
e=e1+'@'+e2+'.'+e3;
betreff="?subject=Betreff";
inhalt="&body=";
a1='<a id="mailtolink" onClick="addToMailbody()" onmouseup="radieren();" href="mai' + 'lto:';
a2='">';
a3='</a>';
link=a1+e+betreff+inhalt+a2+e+a3;
document.write(link);
merke=document.getElementById('mailtolink').href;
function bestellung(){
var nr1= "Nr." + document.getElementById('nummer1').firstChild.data;
var bez1= "%20%20%20%20%20%20%20%20" + document.getElementById('bezeichnung1').firstChild.data;
var pr1= "%20%20%20%20%20%20%20%20" + document.getElementById('preis1').firstChild.data + "%20Euro";
var anz1= "%20%20%20%20%20%20%20%20" + document.getElementById('zahl1').firstChild.data + "%20Stueck";
var sum1= "%20%20%20%20%20%20%20%20" + document.getElementById('sum1').firstChild.data + "%20Euro";
art1=nr1 + bez1 + pr1 + anz1 + sum1;
var nr2= "Nr." + document.getElementById('nummer2').firstChild.data;
var bez2= "%20%20%20%20%20%20%20%20" + document.getElementById('bezeichnung2').firstChild.data;
var pr2= "%20%20%20%20%20%20%20%20" + document.getElementById('preis2').firstChild.data + "%20Euro";
var anz2= "%20%20%20%20%20%20%20%20" + document.getElementById('zahl2').firstChild.data + "%20Stueck";
var sum2= "%20%20%20%20%20%20%20%20" + document.getElementById('sum2').firstChild.data + "%20Euro";
art2="%0A" + nr2 + bez2 + pr2 + anz2 + sum2;
var nr3= "Nr." + document.getElementById('nummer3').firstChild.data;
var bez3= "%20%20%20%20%20%20%20%20" + document.getElementById('bezeichnung3').firstChild.data;
var pr3= "%20%20%20%20%20%20%20%20" + document.getElementById('preis3').firstChild.data + "%20Euro";
var anz3= "%20%20%20%20%20%20%20%20" + document.getElementById('zahl3').firstChild.data + "%20Stueck";
var sum3= "%20%20%20%20%20%20%20%20" + document.getElementById('sum3').firstChild.data + "%20Euro";
art3="%0A" + nr3 + bez3 + pr3 + anz3 + sum3;
einl1= "Einleitungstext%20Singular%0A%0A";
einl2= "Einleitungstext%20Plural%0A%0A";
Kosten= "%0A%0A%0A%20%20%20Kosten%20%20%20" + document.getElementById('gesamt').firstChild.data + "%20Euro";
text=einl1+art1;
if (zeilenzaehler ==3){text=einl2+art1+art2;}
if (zeilenzaehler >=4){text=einl2+art1+art2+art3;}
}
function addToMailbody(){
bestellung();
document.getElementById('mailtolink').href = document.getElementById('mailtolink').href + text + Kosten + adr;
}
function radieren(){
document.getElementById('mailtolink').href = merke;
}