@@Google weiß alles
<script type="text/javascript">
BTW, type="text/javascript"
ist in HTML5 unnötig.
// wenn das Dokument geladen wird führe aus: window.onload=function () {
Zu spät. Es muss nicht gewartet werden, bis das gesamte Dokument (inclusive aller eingebetteter Ressourcen wie Bilder, Webfonts, …) geladen ist. Das passende Event ist DOMContentLoaded
. Von der Notation mit on…
sollte man sowieso Abstand nehmen und addEventHandler()
verwenden.
Das kann man sich aber sparen, wenn das Script dort plaziert wird, wo es stehen sollte: nicht im head
, sondern am Ende des body
.
// binde die Funktion requireMail() an das Ereignis change für die Objekte: document.getElementById('wechselYes').onchange=function () { requireMail(); } document.getElementById('wechselNo').onchange=function () { requireMail(); }
Elegant könnte man den Eventhandler für ein Vorfahrenelement registrieren und event delegation nutzen.
function requireMail() { var obj=document.getElementById('mailadresse');
Es war gewünscht, auch für mehrere Eingabefelder auf einmal required
zu setzen bzw. zu löschen. Diese müsste man entsprechend im Markup kennzeichnen und im Script mit einer Schleife durchlaufen.
if (document.getElementById('wechselYes').checked) { obj.required=true; // Eingabe benötigt obj.disabled=false; // Eingabe erlauben //obj.style.display='inline'; // anzeigen } else { obj.required=false; // Eingabe nicht benötigt obj.value='' // Eingaben löschen obj.disabled=true; // Eingabe verbieten //obj.style.display='none'; // Nicht mehr anzeigen }
Es war lediglich gewünscht, Felder (nicht) als Pflichtfelder vorzusehen; nicht, in diesen Feldern Eingaben zu verbieten oder gar bereits getätigte Eingaben zu löschen.
Dann ist auch keine if
-Abfrage nötig. Der boolesche Wert ist ja gerade derjenige, den man required
zuweisen möchte:
obj.required = document.getElementById('wechselYes').checked;
(Entsprechend ginge auch obj.disabled = !document.getElementById('wechselYes').checked;
Und verbergen sollte man das auch nicht per JavaScript (style.display
), sondern die bereits im DOM vorhande Information per Stylesheet nutzen: [disabled] { display: none }
.)
Die Information, ob required
oder nicht, könnte man auch per Stylesheet nutzen und bspw. * bei Pflichtfeldern anzeigen. Ich hab da mal was gebastelt.
(Ich weiß, dass man den Data-URI prozent-codieren müsste, damit das auch im IE funktioniert. Hab ich mir hier mal gespart.)
Eine Frage hab ich dazu aber: Warum kann man statt
document.querySelector("fieldset").addEventListener('click', function ()
{
requiredOnRequestElements.setRequired();
});
nicht einfach
document.querySelector("fieldset").addEventListener('click', requiredOnRequestElements.setRequired);
schreiben? @Orlok? @1unitedpower?
LLAP 🖖
“You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
Selfcode:
sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|