JavaScript: Code wird nicht ausgeführt?

Josh

Legendäres Mitglied
Hallo alle

Nun, ich programmiere zwar seit Jahren Webs, aber mit JavaScript habe ich mich bisher noch kaum befasst.
Nun will ich eine kleine Funktion schreiben, welche E-Mail Adressen vor E-Mail-Crawlern schützen soll. So sieht das in etwa aus:

CODE <script type="text/javascript"> write_email("info", "atelier-schmuck.ch", "_self", "www.atelier-schmuck.ch - Kontaktanfrage", "");</script><span id="email">info[at]atelier-schmuck[dot]ch</span>


Die Theorie ist einfach: Hat der Benutzer JS aktiviert, schreibt die Funktion einen mailto-Link mit den gemachten Angaben in das Dokument und stellt dann das CSS display Attribut von #email auf hidden.
Hat der Benutzer JS nicht aktiviert, so wird auch kein Code ausgeführt; dafür wird aber der Inhalt von #email angezeigt.

Der JavaScript Code existiert soweit:


CODE function write_email(name, domain, label, subject, body) {
if(label == "_self") { // wenn label = _self, dann gib email-adresse als label aus.
document.write("<a href=\"mailto:" + name + "@" + domain + "?subject=" + subject + "&body=" + body + "\">" + name + "@" + domain + "</a>");
} else { // gib label selber aus.
document.write("<a href=\"mailto:" + name + "@" + domain + "?subject=" + subject + "&body=" + body + "\">" + label + "</a>");
}

var tag_to_hide = document.getElementById("email");
tag_to_hide.style.display = 'none';
}


Soweit, so gut: der mailto-Link wird wunschgemäss ins Dokument eingefügt; allerdings wird das #email tag nicht entfernt.

Leider habe ich keine Ahnung, wieso das nicht funktioniert. Ich wäre sehr dankbar für Hilfe. :) Auch dürft ihr mich sehr gerne auf Unschönheiten im Code aufmerksam machen...

Herzlichen Dank und gute Nacht,
Josh
 
Ja, das ist ein klitzekleines und bösartiges Problem:

Ergänze mal

CODE var tag_to_hide = document.getElementById("email");
alert(tag_to_hide);
tag_to_hide.style.display = 'none';


Was siehst Du dann?

Da der Code (getElementById) mit SelfHtml-Beispielen übereinstimmt, kann das nicht sein - da es doch der Fall ist, dürfte die Lösung auch klar sein (Stichwort Reihenfolge der Codeausführung).
 
QUOTE (Stichwort Reihenfolge der Codeausführung).

Genau so ist. Denk sequenziell.


QUOTE <script type="text/javascript"> write_email("info", "atelier-schmuck.ch", "_self", "www.atelier-schmuck.ch - Kontaktanfrage", "");</script><span id="email">info[at]atelier-schmuck[dot]ch</span>

Es gibt kein Element mit id=email, weil das erst nach der Funktion kommt. Es muss heissen.


QUOTE <span id="email">info[at]atelier-schmuck[dot]ch</span><script type="text/javascript"> write_email("info", "atelier-schmuck.ch", "_self", "www.atelier-schmuck.ch - Kontaktanfrage", "");</script>


Allerdings kann mein Email-Spam-Sammelbot das ohne Probleme verstehen ;-) /.*(@|\[at\]).*(\.|\[dot\]).*/ oder so was in der Art ;-)
 
Herzlichen Dank für eure Hilfe! Und wieder was gelernt... wusste nicht, dass JavaScript sequentiell im HTML Code verarbeitet wird.
tongue.gif


Grüsse,
Josh :)
 
Schön ists, wenn man mit <body onload=''> etc. arbeitet. Verliert man auch nicht so schnell den Überblick.
 
Zurück
Oben