Ich habe ein großes Formular, das ich dem Benutzer mit Bootstrap-Registerkarten präsentiere. Auf verschiedenen Registerkarten gibt es Eingabefelder mit einem required="required"
Attribut.Wie abfangen Formular onsubmit, wenn Pflichtfelder ausgeblendet sind?
<!-- illustrative code only, with all the excess cruft elided -->
<form onsumbit="return somefunction(this);" method=post action="url">
<fieldset style="display: none;">
<!-- the hidden tab -->
<input required name="princess">
</fieldset>
<fieldset>
<input required name="goomba">
</fieldset>
<button type=submit>Save</button>
</field>
Wenn es leer erforderliche Felder auf nicht-aktuell Tabs und ich den Absenden-Button klicken, dann wird das Formular nicht eingereicht, aber auch der Browser (Chrome v55) tut nichts, um den Benutzer zu den leer erforderlichen Feldern zu alarmieren auf den ausgeblendeten Tabs.
Ich habe einen onsubmit="return validateForm(this)"
Handler auf dem <form…>
Element dachte ich es sinnvoll, etwas tun könnte ... aber das Handler wird nicht aufgerufen werden. Es scheint, dass der Browser alle nicht sichtbaren Eingaben auf Gültigkeit und Ersticken prüft, bevor er den Handler onsubmit
aufruft.
In der Konsole sehe ich eine Fehlermeldung von "Ein ungültiges Formular Steuerelement mit Name = 'Prinzessin' ist nicht fokussierbar." Die Formularsteuerung princess
befindet sich auf einer anderen Registerkarte (<input type=text name=princess required=required>
) und dieser Fehler wird ausgelöst, bevor der onsubmit eine Ausführungsmöglichkeit erhält.
Also .. angehen mit <form onsubmit=…>
ist nicht die richtige Strategie.
Was kann ich tun, um einige js auszuführen, wenn der Benutzer versucht, das Formular zu übermitteln, und dass js anmutig das Notwendige tun?
Wie wäre es mit Bibliotheken wie http://jqueryvalidation.org/ und _not_ verwenden Sie die 'erforderlichen 'HTML5-Eigenschaft? Oder Sie können 'required' aus den versteckten Eingabefeldern entfernen und' onsubmit' den Rest machen lassen? –
Wenn ein erforderliches Feld auf der ersten Registerkarte vorhanden ist, ist es immer noch erforderlich, wenn die Ansicht auf die zweite Registerkarte eingestellt ist. Für den Fall von bedingt erforderlichen Feldern verberge ich, wenn nicht erforderlich, und setze auch das Attribut "disabled = disabled", was erforderlich = erforderliches Moot für dieses Feld rendert. – Erics
Bisher habe ich herausgefunden, dass