2017-11-29 1 views
0

Ich entwerfe ein Formular zum Auslösen onsubmit durch Drücken von "Enter" auf der Tastatur, und das Ereignis wird nicht auf bestimmten Browsern abhängig davon ausgelöst Felder sind in der Form.HTML-Formular onsubmit schlägt auf bestimmten Browsern mit versteckten Übermittlungsschaltfläche und readonly Eingabe

Hier sind einige minimale Arbeitsbeispiele für Formulare, die auslösen und nicht auslösen submit.

Firefox, Chrome und Opera sind mit den folgenden Formularen zufrieden, aber Internet Explorer 11 und Safari 11 werden onsubmit auf dem dritten Formular nicht auslösen.

Form 1:

<form> 
    <input type="text"> 
    <input type="submit" style="display:none;"> 
</form> 

Form 2:

<form> 
    <input type="text"> 
    <input readonly> 
    <input type="submit"> 
</form> 

Form 3 (abgehört):

<form> 
    <input type="text"> 
    <input readonly> 
    <input type="submit" style="display:none;"> 
</form> 

Wie kann ich die dritte Form erhalten submit auszulösen auf diesen Browsern beim Drücken 'Enter', während der Submit Button ausgeblendet bleibt und kein hacky keypress Event-Handler verwendet wird? Eine Erklärung dafür, warum die dritte Form das Ereignis nicht auslöst, wäre sehr hilfreich.

Here ist ein JSFiddle für Ihre Bequemlichkeit.

Bearbeiten: Die akzeptierte Lösung der zugehörigen Frage setzt display: none auf die Schaltfläche Senden, die dieses Problem in Safari/IE nicht gelöst hätte.

+0

_ "Eine Erklärung dafür, warum die dritte Form das Ereignis nicht auslöst, wäre sehr hilfreich." _ - weil es keine Sendeschaltfläche hat (wie @Dummy sagte, mit 'display: none' ist es so, als ob es gar nicht da wäre) , _and_ mehr als ein Feld, das die implizite Übergabe blockiert (die beiden Textfelder) - dies ist ein spezifiziertes Verhalten in HTML5, siehe meine Antwort auf eine vorherige Frage ähnlicher Art hier: https://Stackoverflow.com/a/28709364/1427878 – CBroe

+0

Der Schwerpunkt der anderen Frage war Text Eingabefelder, so dass ich nur zitiert "und dessen Typ Attribut ist in einer der die folgenden Zustände: Text, [...] "aus der Spezifikation, aber diese Liste geht weiter," Suche, URL, Telefon, E-Mail, Passwort, Datum, Uhrzeit, Nummer "- also wenn Sie das" readonly "_send_ müssen Wert mit den anderen Formulardaten (momentan noch ein 'text' Feld, weil das Standard ist, wenn' type' weggelassen wird), dann würde ich vorschlagen, dass Sie es durch eine 'versteckte' Eingabe ersetzen (kümmert sich um den Wert zu senden, und Blockiert die implizite Übergabe nicht) und fügt denselben Wert hinzu, den der Benutzer in einem 'span'-Element sehen kann. – CBroe

Antwort

0

Verwenden visibility: hidden statt display: none weil display: none Elemente erhalten keine Ereignisse

Oder Opazität verwenden und es absolut außerhalb des Bildschirms zu positionieren, so dass es keinen Platz in Anspruch nimmt und erscheint nicht auf dem Bildschirm

opacity: 0; 
position: absolute; 
left: -3000px; 
+0

Warum hat das erste Formular 'submit' ausgelöst, dann? – user9027325

+0

@ user9027325 weil es nur ein Feld hatte, das implizite Einreichung blockiert - siehe meinen Kommentar und die Antwort, auf die ich mich beziehe, für weitere Details. – CBroe

+0

'visibility: hidden' funktioniert auf Safari, aber nicht auf IE. :( – user9027325

Verwandte Themen