Formular mit transparentem <DIV> sperren; wie?
reinhard
- javascript
0 Joachim0 derletztekick0 wahsaga0 Axel Richter
Hallo Leute,
ich möchte ein Formular sperren, während eine AJAX-Anfrage an den Server läuft, damit der Anwender in der Zeit keinen Unsinn mit den Eingabefeldern, Links und Buttons anstellt.
Natürlich könnte ich mit javascript alle Elemente einzeln sperren, bei der komplexen Maske ist das aber sehr umständlich. Schließlich muß ich alles nach Abschluß der AJAX-Abfrage wieder freigeben.
Meine Idee war daher, über das Formular ein transparentes <DIV>-Element zu legen und so alles auf einmal zu sperren. Bei Eingabefeldern (input type=text) funktioniert das auch perfekt. Leider können Buttons und Links weiterhin angeklickt werden. Ich habe schon mit dem z-index experimentiert, aber diese Elemente liegen immer im Vordergrund.
Gibt es eine Möglichkeit, ein komplexes Formular global zu sperren, ohne jedes einzelne Element des Formulars anzufassen?
Vielen Dank im voraus,
Reinhard
Hi,
Gibt es eine Möglichkeit, ein komplexes Formular global zu sperren, ohne jedes einzelne Element des Formulars anzufassen?
<form style="display:none">
Gruesse, Joachim
Danke für den Tip.
Allerdings: sichtbarlassen wollte ich das Formular schon. Die Methode scheint mir etwas drastisch zu sein.
Schöne Grüße,
Reinhard
Hi,
Gibt es eine Möglichkeit, ein komplexes Formular global zu sperren, ohne jedes einzelne Element des Formulars anzufassen?
<form style="display:none">Gruesse, Joachim
Hallo,
Wenn dieses Problem (nur) im IE auftritt, dann könnstest Du dem Formular mit dem MS Filter AlphaImageLoader ein "Hintergrund"bild (png) laden lassen. Dann sollten die enthaltenen Elemente derart kastriert sein, daß man sie nicht benutzen kann. Eigentlich sollte in Gecko-Browsern ein überlagertes Layer reichen. IIRC ist das "durchscheinen" von buttons ein IE-"feature".
Ich meine im Zusammenhang mit dem lightbox-script mal so etwas gelesen zu haben.
Ich bin mir aber nicht ganz sicher.
Vielleicht hilft's. Viel Erfolg.
^da Powl
Hi,
Wenn dieses Problem (nur) im IE auftritt, dann könnstest Du dem Formular mit dem MS Filter AlphaImageLoader ein "Hintergrund"bild (png) laden lassen.
und wenn es nur im IE nicht auftaucht, könntest Du per Prototyping dem Formular eine Methode verpassen, so dass es sich selbst um das dis- und enabling der enthaltenen Feldelemenete kümmert.
Cheatah
Der Vorschlag klingt auch gut. Allerdings kann ich mir unter "Prototyping" nichts vorstellen (bin nur ein "angelernter" Programmierer, kein Profi). Könntest Du ein einfaches Beispiel skizzieren?
Gruß, Reinhard
Hi,
Wenn dieses Problem (nur) im IE auftritt, dann könnstest Du dem Formular mit dem MS Filter AlphaImageLoader ein "Hintergrund"bild (png) laden lassen.
und wenn es nur im IE nicht auftaucht, könntest Du per Prototyping dem Formular eine Methode verpassen, so dass es sich selbst um das dis- und enabling der enthaltenen Feldelemenete kümmert.
Cheatah
Hi,
Der Vorschlag klingt auch gut. Allerdings kann ich mir unter "Prototyping" nichts vorstellen (bin nur ein "angelernter" Programmierer, kein Profi). Könntest Du ein einfaches Beispiel skizzieren?
Prototyping ist die Art der Objektorientierung in JavaScript. Jeder Objekttyp ("Klasse" mag ich nicht sagen) verfügt über ein .prototype-Objekt, in dem die Members stehen und verändert werden können - auch nachträglich. Beispiel:
String.prototype.ucfirst = function() {
return this.substring(0,1).toUpperCase()+this.substr(1);
}
alert("hallo".ucfirst());
Moderne Browser können das mit praktisch allem machen (Geckos beispielsweise versagen eigentlich nur bei Location.prototype - das Objekt ist nativ), der IE schwächelt mal wieder an beliebig vielen Stellen.
Cheatah
BINGO!
das wars!
Die Syntax für den AlphaImageLoader ist etwas sperrig, aber ich habe in SELFHTML unter dem Stichwort "Alpha-Effekt" ein Beispiel mit anderer Syntax gefunden, das genau das tut, was Du beschrieben hast.
Da ich eine Anwendung für unser Intranet programmiere und auch aus anderen Gründen nur den IE zulassen kann (Verwendung von modalen Dialogboxen, keine Zeit, um die Anwendung "mehrfach" für die verschiedenen Browser zu programmieren, Vorgaben der Firma usw. usw.), bedeutet es für mich keine Einschränkung, die proprietäre MS-Funktionalität zu verwenden.
Problem gelöst, vielen Dank!
SEHR HILFREICH!
Gruß, Reinhard
Hallo,
Wenn dieses Problem (nur) im IE auftritt, dann könnstest Du dem Formular mit dem MS Filter AlphaImageLoader ein "Hintergrund"bild (png) laden lassen. Dann sollten die enthaltenen Elemente derart kastriert sein, daß man sie nicht benutzen kann. Eigentlich sollte in Gecko-Browsern ein überlagertes Layer reichen. IIRC ist das "durchscheinen" von buttons ein IE-"feature".
Ich meine im Zusammenhang mit dem lightbox-script mal so etwas gelesen zu haben.
Ich bin mir aber nicht ganz sicher.Vielleicht hilft's. Viel Erfolg.
^da Powl
Hi,
btw:
SEHR HILFREICH!
Hierzu gibt es unter jedem Artikel einen Link ;-)
Cheatah
Hallo reinhard,
reicht es nicht, wenn Du den einen Startbutton disabled setzt? Die Textfelder können doch geändert werden aber eine neue Anfrgae kann nicht gesendet werden.
Mit freundlichem Gruß
Micha
Das mache ich schon zusätzlich. Die Datenabfrage schreibt aber letztlich die Daten in die änderbaren Textfelder (als Vorschlag). Der "Änderungsmodus" soll aber erst wieder aktiviert sein, wenn die Abfrage abgeschlossen ist. Nach einer evtl. Änderung der Daten aus der Datenbank (= Vorschlag) soll man das Ganze dann Abspeichern.
Gruß, Reinhard
Hallo reinhard,
reicht es nicht, wenn Du den einen Startbutton disabled setzt? Die Textfelder können doch geändert werden aber eine neue Anfrgae kann nicht gesendet werden.
Mit freundlichem Gruß
Micha
Hallo reinhard,
Das mache ich schon zusätzlich. Die Datenabfrage schreibt aber letztlich die Daten in die änderbaren Textfelder (als Vorschlag).
Setze diese doch editable = false
, solange Du nicht möchtest, das einer doch etwas ändert.
Mit freundlichem Gruß
Micha
hi,
Meine Idee war daher, über das Formular ein transparentes <DIV>-Element zu legen und so alles auf einmal zu sperren.
Soll mich das wirklich daran hindern können, per [tab]-Taste ein Eingabefeld weiterhin anzuwählen, und dann durch weitere Tastendrücke den Feldinhalt zu verändern?
(Ich hab's jetzt nicht ausprobiert, bezweifle aber, ob das "reicht".)
gruß,
wahsaga
Hallo,
ich möchte ein Formular sperren, während eine AJAX-Anfrage an den Server läuft, damit der Anwender in der Zeit keinen Unsinn mit den Eingabefeldern, Links und Buttons anstellt.
Natürlich könnte ich mit javascript alle Elemente einzeln sperren, bei der komplexen Maske ist das aber sehr umständlich. Schließlich muß ich alles nach Abschluß der AJAX-Abfrage wieder freigeben.
Naja, umständlich muss man es ja nicht machen:
function disableForm(F) {
for (var i = 0; i < F.elements.length; i++) {
F.elements[i].disabled=true;
}
}
function enableForm(F) {
for (var i = 0; i < F.elements.length; i++) {
F.elements[i].disabled=false;
}
}
Hiermit können alle Elemente innerhalb beliebiger FORMulare gesperrt und wieder entsprerrt werden. Aufruf z.B. mit:
disableForm(document.forms[0]);
oder
disableForm(document.forms['Formname']);
bei enableForm(F) entsprechend.
viele Grüße
Axel