381 Stimmen

Absenden eines Formulars durch Drücken der Eingabetaste, ohne dass eine Schaltfläche zum Absenden vorhanden ist

Ich versuche, ein Formular durch Drücken der Eingabetaste abzuschicken, aber es wird keine Schaltfläche zum Abschicken angezeigt. Ich möchte nicht in JavaScript zu erhalten, wenn möglich, da ich alles auf allen Browsern (die einzige JS Weg, den ich kenne, ist mit Ereignissen) arbeiten möchten.

Im Moment sieht das Formular wie folgt aus:

<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" style="height: 0px; width: 0px; border: none; padding: 0px;" hidefocus="true" />
</form>

Das funktioniert ziemlich gut. Die Schaltfläche "Submit" funktioniert, wenn der Benutzer die Eingabetaste drückt, und die Schaltfläche wird in Firefox, IE, Safari, Opera und Chrome nicht angezeigt. Dennoch gefällt mir die Lösung nicht, da es schwer zu sagen ist, ob sie auf allen Plattformen mit allen Browsern funktionieren wird.

Kann jemand eine bessere Methode vorschlagen? Oder ist dies die beste Methode, die es gibt?

9 Stimmen

Ein kleiner Punkt, der einige Zeichen in Ihrem CSS einsparen könnte und in der Regel automatisch von Minifiern erledigt wird: Sie benötigen keine Einheiten für Null-Längenmessungen. 0px = 0pt = 0em = 0em usw.

1 Stimmen

@pwdst danke für den Hinweis auf diese - ich bin von der Python-Welt, so "explizit ist besser als implizit", und wirklich fragen, ob dies der Fall in CSS ist, oder haben CSS Schöpfer ein anderes Idiom?

3 Stimmen

Null ist hier die Ausnahme von der Regel @ericmjl - 0px == 0em == 0% == 0vh == 0vh usw. Bei anderen Längenmaßen (die nicht Null sind) ist es nicht nur schlechte Praxis, sondern verstößt auch gegen die Normen, keine Einheiten anzugeben, und Sie werden ein unterschiedliches Verhalten in den User Agents (Browsern) feststellen. Siehe developer.mozilla.org/de-US/docs/Web/CSS/length y drafts.csswg.org/css-values-3/#lengths

297voto

Ates Goral Punkte 132294

Update 2022: Verwenden Sie stattdessen dies

<input type="submit" hidden />

Hinweis - Veraltete Antwort

Bitte verwenden Sie nicht position: absolute im Jahr 2021+. Es wird empfohlen, die hidden stattdessen das Attribut. Andernfalls schauen Sie unten nach und wählen Sie eine bessere, modernere Antwort.

Essayez :

<input type="submit" style="position: absolute; left: -9999px"/>

Dadurch wird die Schaltfläche weit nach links aus dem Bildschirm herausgeschoben. Die nette Sache mit diesem ist, würden Sie graceful Degradation erhalten, wenn CSS deaktiviert ist.

Update - Umgehung für IE7

Wie von Bryan Downing vorgeschlagen + mit tabindex um zu verhindern, dass die Registerkarte diese Schaltfläche erreicht (von Ates Goral):

<input type="submit" 
       style="position: absolute; left: -9999px; width: 1px; height: 1px;"
       tabindex="-1" />

106voto

strager Punkte 86191

Ich glaube, Sie sollte den Weg über Javascript gehen, oder zumindest würde ich das tun:

<script type="text/javascript">
// Using jQuery.

$(function() {
    $('form').each(function() {
        $(this).find('input').keypress(function(e) {
            // Enter pressed?
            if(e.which == 10 || e.which == 13) {
                this.form.submit();
            }
        });

        $(this).find('input[type=submit]').hide();
    });
});
</script>

<form name="loginBox" target="#here" method="post">
    <input name="username" type="text" /><br />
    <input name="password" type="password" />
    <input type="submit" />
</form>

85voto

andyk Punkte 9971

Haben Sie das schon ausprobiert?

<input type="submit" style="visibility: hidden;" />

Da die meisten Browser die visibility:hidden und es funktioniert nicht wirklich wie display:none Ich denke aber, dass es in Ordnung sein sollte. Ich habe es nicht wirklich selbst getestet, also CMIIW.

41voto

damoiser Punkte 5788

Eine andere Lösung ohne die Schaltfläche "Senden":

HTML

<form>
  <input class="submit_on_enter" type="text" name="q" placeholder="Search...">
</form>

jQuery

$(document).ready(function() {

  $('.submit_on_enter').keydown(function(event) {
    // enter has keyCode = 13, change it if you want to use another button
    if (event.keyCode == 13) {
      this.form.submit();
      return false;
    }
  });

});

32voto

Panomosh Punkte 769

Für alle, die sich in Zukunft mit dieser Antwort befassen möchten: HTML5 implementiert ein neues Attribut für Formularelemente, hidden die automatisch angewendet wird display:none zu Ihrem Element.

z.B..

<input type="submit" hidden />

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X