nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Re: element.onfocus soll anderes Element verbergen

Von: Thomas 'PointedEars' Lahn (pointedears@web.de) [Profil]
Datum: 01.09.2008 00:51
Message-ID: <48BB207C.6010801@PointedEars.de>
Newsgroup: de.comp.lang.javascript
Daniel Jung wrote:
> N'Abend.

Guten Morgen.  (Ja, zeitgebundene Begrüssungen sind in einem weltweiten
Nicht-Echtzeitmedium wie dem Usenet unsinnig.)

> [...] Wenn der Benutzer dann in der Box weitermacht, soll die
> Meldung in der div verschwinden, [...]
> Ich habe das jetzt gerade so gelöst wie es unten steht (minimal), das
> klappt bisher fehlerlos, mit oder ohne <div id="lastSuccess">. Mir
fällt
> da auch nichts besseres ein. Onchange ging nicht, onfocus reicht aber
> eigentlich; es sind dann zwar streng genommen keine Veränderungen
> vorgenommen worden, aber die Textbox wurde zumindest wieder angefasst.
>
> Meine Frage zum Code: Ist das irgendwo "fehlerträchtig und
ineffizient",

Fehlerträchtig: Das kommt darauf an, wo sich Dein script-Element befindet.
Es sollte sich im head-Element befinden, damit die Methode voraussichtlich
instantiiert wird, bevor das Markup, auf dem sie operieren soll, gerendert wird.

Ineffizient: Ja.  Es genügt wohl, die Referenz zum div-Element einmal zu
ermitteln.  Dies sollte dann `onload' des body-Elements geschehen.

> gibt es bessere Lösungen?

Ja.

> Und genereller: Wie würdet ihr die Fragestellung lösen?

Die Events `mouseup' und `keyup' sind gute Kandidaten.  Hier sollte dann
aber auch überprüft werden, ob sich wirklich etwas am
Textinhalt geändert
hat, bevor möglicherweise voreilig ausgeblendet wird.  Also: beim Laden
den alten Stand zwischenspeichern und on Event damit vergleichen.

> ------------------------------------
>
> <script type="text/javascript">
> function removeSuccess() {
>    var lastSuccess = document.getElementById("lastSuccess");
>    if (lastSuccess != undefined) {

if (lastSuccess)
{

genügt und ist standardkonform.  (Lt. W3C DOM Level 2 darf
Document::getElementById() nur dann `undefined' liefern, wenn es im Dokument
mehr als ein Element mit dieser ID gibt [was ungültig wäre].
 Der
undefined-Wert von ECMAScript erfüllte dann gewissermassen die
DOM-Spezifikation, die für diesen Fall keinen bestimmten
Rückgabewert
spezifiziert; jener muss sich nur von den spezifizierten unterscheiden.)

>     lastSuccess.style.display = "none";

Du hast "vergessen", auf alle verwendeten Eigenschaften zu testen, bevor Du
auf sie zugreifst.  Du hast es hier mit Host-Objekten zu tun, und kannst
daher erst recht nichts voraussetzen.


PointedEars
--
Clientseitig geht das nicht wirklich, weil der Browser selbst keine
Mails verschicken kann und das Kooperieren mit Mailprogrammen eher
in ein Kollabieren entartet.
(Georg Maaß in dcljs <aoh6vi$mbrnu$4@ID-3551.news.dfncis.de>)

[ Auf dieses Posting antworten ]

Antworten