Geben Sie die Eingabetaste in einem HTML-Formular ein, anstatt die Schaltfläche zu aktivieren


81

Ich habe ein HTML-Formular mit einer einzigen submitEingabe, aber auch verschiedenen buttonElementen. Wenn der Benutzer die Eingabetaste drückt, würde ich erwarten, dass das Formular tatsächlich gesendet wird, aber stattdessen (zumindest in Chrome 15) stelle ich fest, dass es das erste auslöst button(da dies früher im HTML als in der submitEingabe erfolgt) , Ich vermute).

Ich weiß, dass Sie Browser im Allgemeinen nicht zwingen können, eine bestimmte submitEingabe zu bevorzugen , aber ich dachte wirklich, dass sie submitEingaben gegenüber buttonElementen bevorzugen würden . Gibt es eine kleine Änderung, die ich am HTML vornehmen kann, damit dies funktioniert, oder muss ich eine Art Javascript-Ansatz wählen?

Hier ist ein grobes Modell des HTML:

<form action="form.php" method="POST">
    <input type="text" name="field1"/>
    <button onclick="return myFunc1()">Button 1</button>
    <input type="submit" name="go" value="Submit"/>
</form>

Überprüfen Sie diese Frage: stackoverflow.com/a/925387/1031900
Ofir Farchy

1
@OfirFarchy Ich denke, was diese Frage anders gemacht hat, war, dass es nur EINEN Submit gibt, die anderen sind alle Buttons.
Andygeers

Nun, wenn Sie nichts dagegen haben, JS und jQuery zu verwenden, überprüfen Sie die Antworten von my & david
Ofir Farchy

Antworten:


143

Sie benötigen kein JavaScript, um Ihre Standard-Senden-Schaltfläche oder -Eingabe auszuwählen. Sie müssen es nur mit markieren type="submit", und die anderen Schaltflächen markieren sie mit type="button". In Ihrem Beispiel:

<button type="button" onclick="return myFunc1()">Button 1</button>
<input type="submit" name="go" value="Submit"/>

4
Dies funktioniert in einigen Browsern tatsächlich nicht wie erwartet. Ich bin heute auf dieses Problem gestoßen, weil ich dachte, der Typ = "Submit" würde es zum Standard machen, aber nicht in Chrome oder Safari.
Ben Davis

5
Es funktioniert für mich in Chrome und Safari. Es muss etwas anderes sein.
Jesús Carrera

15
Das Setzen von type = "button" auf den zusätzlichen Schaltflächen UND das Setzen von type = "submit" macht den Unterschied.
Alex

21
Der Grund, warum es nicht funktioniert, wenn Sie es nicht festlegen, type="button"ist, dass standardmäßig Schaltflächenelemente vorhanden sind type="submit". Die Prämisse in der Frage, dass es nur einen einzigen Senden-Button gab, war also tatsächlich falsch.
Elezar

30

Sie können jQuery verwenden:

$(function() {
    $("form input").keypress(function (e) {
        if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
            $('button[type=submit] .default').click();
            return false;
        } else {
            return true;
        }
    });
});

14
Da dies die akzeptierte Antwort ist: Scrollen Sie nach unten, um eine sehr einfache Nur-HTML-Lösung zu erhalten.
6.

2
Die HTML-Lösung ist die richtige Antwort. Ein Browser behandelt standardmäßig
Edward Newsome

Ich weiß, dass dies eine alte Antwort ist, aber Sie müssen dieses "schwere Gerät" nicht verwenden, um dieses Problem zu lösen. Verwenden Sie die reine HTML-Lösung (Antwort von @ Jesús Carrera). Der Browser übernimmt dies jetzt.
Martijn Luyckx

1
Das Schöne an diesem Ansatz - obwohl ja, dass er jQuery / JavaScript erfordert - ist, dass er auch dann funktioniert, wenn Sie mehrere Übermittlungsschaltflächen in Ihrem Formular benötigen. Der spezifische Selektor in diesem Beispiel sollte jedoch kein Leerzeichen nach dem haben button[type=submit], vorausgesetzt, Sie haben Ihre Standard-Submit-Schaltfläche mit der defaultCSS-Klasse markiert .
Christopher King

4

Versuchen Sie dies, wenn die Eingabetaste gedrückt wurde, können Sie es zum Beispiel so erfassen. Ich habe neulich eine Antwort entwickelt. Geben Sie die HTML-Schaltfläche ausgewählt an , um zu sehen, ob dies hilft.

Geben Sie den Formularnamen an, z. B. yourFormNamesollten Sie das Formular senden können, ohne sich auf das Formular zu konzentrieren.

document.onkeypress = keyPress;

function keyPress(e){
  var x = e || window.event;
  var key = (x.keyCode || x.which);
  if(key == 13 || key == 3){
   //  myFunc1();
   document.yourFormName.submit();
  }
}

Wenn das Formular mehr Schaltflächen zum Senden enthält, hilft dies: <input type = "submit" id = "submit" value = "ok" /> document.getElementById ("submit"). click ();
Muflix

Dies ist eine stumpfe Methode, um das Standardverhalten in HTML zu umgehen. Siehe obige Antwort für warum.
Alttag

4
$("form#submit input").on('keypress',function(event) {
  event.preventDefault();
  if (event.which === 13) {
    $('button.submit').trigger('click');
  }
});

3

Ich habe gerade ein Problem damit. Meins war ein Sturz vom Ändern des inputzu einem buttonund ich hatte einen schlecht geschriebenen />Tag-Terminator:

So hatte ich:

<button name="submit_login" type="submit" class="login" />Login</button>

Und habe es gerade geändert, um:

<button name="submit_login" type="submit" class="login">Login</button>

Jetzt funktioniert wie ein Zauber, immer die nervigen kleinen Dinge ... HTH


2

Da es nur eine (oder bei dieser Lösung möglicherweise nicht einmal eine) Schaltfläche zum Senden gibt, ist hier eine jQuery-basierte Lösung, die für mehrere Formulare auf derselben Seite funktioniert ...

<script type="text/javascript">
    $(document).ready(function () {

        var makeAllFormSubmitOnEnter = function () {
            $('form input, form select').live('keypress', function (e) {
                if (e.which && e.which == 13) {
                    $(this).parents('form').submit();
                    return false;
                } else {
                    return true;
                }
            });
        };

        makeAllFormSubmitOnEnter();
    });
</script>

1

Ich habe dies gerade in Chrome und Firefox und IE10 gewirbelt.

Wie oben erwähnt - stellen Sie sicher, dass Sie mit type = "button", "reset", "submit" usw. markiert haben, um sicherzustellen, dass die richtige Schaltfläche korrekt kaskadiert und ausgewählt wird.

Vielleicht auch alle so einstellen, dass sie die gleiche Form haben (dh alle, die für mich funktionierten)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.