1465 Stimmen

Auslösen eines Tastenklicks mit JavaScript auf die Eingabetaste in einem Textfeld

Ich habe eine Texteingabe und eine Schaltfläche (siehe unten). Wie kann ich JavaScript verwenden, um das Klick-Ereignis der Schaltfläche auslösen wenn die Enter Taste innerhalb des Textfeldes gedrückt wird?

Auf meiner aktuellen Seite gibt es bereits eine andere Schaltfläche "Senden", also kann ich die Schaltfläche nicht einfach zu einer Schaltfläche "Senden" machen. Und, ich nur wollen die Enter Taste, um auf diese spezielle Schaltfläche zu klicken, wenn sie in diesem einen Textfeld gedrückt wird, sonst nichts.

<input type="text" id="txtSearch" />
<input type="button" id="btnSearch" value="Search" onclick="doSomething();" />

5 Stimmen

Wichtiger Hinweis für Neulinge wie mich: Der wichtigste Teil dieser Frage ist, ob Sie bereits ein Formular auf der Seite haben, also bereits eine Schaltfläche zum Absenden haben. Die jQuery-Antwort ist browserübergreifend kompatibel und eine gute Lösung.

6 Stimmen

@JoshuaDance, ein bereits vorhandenes Formular/Submit ist kein Problem. Eine Seite kann viele Formulare haben (aber nicht verschachtelt), von denen jedes seine eigene Übermittlung hat. Jedes Feld eines jeden Formulars löst nur die Übermittlung des jeweiligen Formulars aus. Wie bereits von diese Antwort .

1552voto

Steve Paulo Punkte 17528

In jQuery würde das Folgende funktionieren:

$("#id_of_textbox").keyup(function(event) {
    if (event.keyCode === 13) {
        $("#id_of_button").click();
    }
});

$("#pw").keyup(function(event) {
    if (event.keyCode === 13) {
        $("#myButton").click();
    }
});

$("#myButton").click(function() {
  alert("Button code executed.");
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Username:<input id="username" type="text"><br>
Password:&nbsp;<input id="pw" type="password"><br>
<button id="myButton">Submit</button>

Oder in einfachem JavaScript würde das Folgende funktionieren:

document.getElementById("id_of_textbox")
    .addEventListener("keyup", function(event) {
    event.preventDefault();
    if (event.keyCode === 13) {
        document.getElementById("id_of_button").click();
    }
});

document.getElementById("pw")
    .addEventListener("keyup", function(event) {
    event.preventDefault();
    if (event.keyCode === 13) {
        document.getElementById("myButton").click();
    }
});

function buttonCode()
{
  alert("Button code executed.");
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Username:<input id="username" type="text"><br>
Password:&nbsp;<input id="pw" type="password"><br>
<button id="myButton" onclick="buttonCode()">Submit</button>

14 Stimmen

Es ist wahrscheinlich besser, event.which abzufragen als event.keyCode oder event.charCode, siehe developer.mozilla.org/de/DOM/event.charCode#Notes

0 Stimmen

@William: Da er die keyup und Ihr Link sagt " charCode wird nie in der Datei keydown y keyup Ereignisse. In diesen Fällen, keyCode gesetzt." spielt das keine Rolle. Allerdings glaube ich nicht, dass keyup ist das richtige Ereignis für die Aufgabe ( keydown Ich hätte gedacht, dass sich eine Schaltfläche so verhält, wenn sie z. B. den Fokus hat).

28 Stimmen

keydown no keyup ist das bessere Ereignis für die Verwendung. Wenn Sie asp.net verwenden, müssen Sie außerdem return false am Ende, um asp.net davon abzuhalten, das Ereignis noch abzufangen.

438voto

Sergey Ilinsky Punkte 30525

Dann geben Sie es einfach ein!

<input type = "text"
       id = "txtSearch" 
       onkeydown = "if (event.keyCode == 13)
                        document.getElementById('btnSearch').click()"    
/>

<input type = "button"
       id = "btnSearch"
       value = "Search"
       onclick = "doSomething();"
/>

6 Stimmen

Ja, das hätte ich fast getan. Ich denke, es ist nur eine persönliche Vorliebe... Ich mag den modularen Ansatz ;)

11 Stimmen

Wenn Sie die Übermittlung des Formulars abbrechen müssen:onkeydown="if (event.keyCode == 13) {document.getElementById('btnSubmit').click();event.returnValue=false;event.cancel=true;}"

1 Stimmen

Wie steht es um die Kompatibilität zwischen den Browsern? Funktioniert sie in allen gängigen Browsern? (Ich sehe den IE6 als gängigen Browser, da er immer noch mehr als 5 % der weltweit verwendeten Browser hat)

187voto

kdenney Punkte 17643

Ich habe es herausgefunden:

<input type="text" id="txtSearch" onkeypress="return searchKeyPress(event);" />
<input type="button" id="btnSearch" Value="Search" onclick="doSomething();" />

<script>
function searchKeyPress(e)
{
    // look for window.event in case event isn't passed in
    e = e || window.event;
    if (e.keyCode == 13)
    {
        document.getElementById('btnSearch').click();
        return false;
    }
    return true;
}
</script>

24 Stimmen

E = e || window.event; // kürzester Weg zum Ereignis

3 Stimmen

Beste einfache JavaScript-Option. Das Hinzufügen von JavaScript als Attribut in HTML ist platzraubend, und jQuery ist einfach jQuery (Kompatibilität ist nicht garantiert). Vielen Dank für die Lösung!

0 Stimmen

Und wenn Sie innerhalb des if false zurückgeben, können Sie verhindern, dass der Schlüssel weiter verarbeitet wird: <input type="text" id="txtSearch" onkeypress="searchKeyPress(event);" /> <input type="button" id="btnSearch" Value="Search" onclick="doSomething();" /> <script> function searchKeyPress(e) { // look for window. Ereignis, falls Ereignis nicht übergeben wird e = e || window.event; if (e.keyCode == 13) { document.getElementById('btnSearch').click(); return false; } return true; } </script>

90voto

albertein Punkte 25058

Machen Sie die Schaltfläche zu einem Submit-Element, damit es automatisch funktioniert.

<input type = "submit"
       id = "btnSearch"
       value = "Search"
       onclick = "return doSomething();"
/>

Beachten Sie, dass Sie eine <form> Element, das die Eingabefelder enthält, damit dies funktioniert (danke Sergey Ilinsky).

Es ist keine gute Praxis, das Standardverhalten neu zu definieren, die Enter Taste sollte immer die Schaltfläche "Senden" eines Formulars aufrufen.

35 Stimmen

Leute! Lest seine gesamte Frage. Auf der Seite gibt es bereits eine weitere Schaltfläche "Senden", so dass dies für ihn nicht funktionieren würde.

7 Stimmen

Ich habe kürzlich versucht, dies in SharePoint zu tun. SharePoint hat jedoch bereits ein Formular, das den gesamten Inhalt umschließt, und jede <form> Tags werden von dem ansonsten liberalen HTML-Parser verworfen. Also muss ich wohl oder übel Tastendrucke entführen. (Übrigens, wenn man in SharePoint die Eingabetaste drückt, wird aus irgendeinem Grund der Bearbeitungsmodus gestartet. Ich vermute, die Multifunktionsleiste verwendet das gleiche Formular).

2 Stimmen

A <button type="submit" onclick="return doSomething(this)">Value</button> arbeitet an. Der Hinweis liegt in der return Stichwort

82voto

icedwater Punkte 4432

Da noch niemand die addEventListener aber hier ist meine Version. Gegeben die Elemente:

<input type = "text" id = "txt" />
<input type = "button" id = "go" />

Ich würde das Folgende verwenden:

var go = document.getElementById("go");
var txt = document.getElementById("txt");

txt.addEventListener("keypress", function(event) {
    event.preventDefault();
    if (event.keyCode == 13)
        go.click();
});

Auf diese Weise können Sie den Ereignistyp und die Aktion separat ändern und gleichzeitig den HTML-Code sauber halten.

Hinweis dass es sich wahrscheinlich lohnt, dafür zu sorgen, dass dies außerhalb eines <form> denn wenn ich diese Elemente einfüge und die Eingabetaste drücke, wird das Formular abgeschickt und die Seite neu geladen. Ich brauchte einige Augenblicke, um das zu erkennen.

Nachtrag : Dank eines Kommentars von @ruffin habe ich den fehlenden Event-Handler und eine preventDefault damit dieser Code (vermutlich) auch innerhalb eines Formulars funktionieren kann. (Ich werde dies noch testen und dann die eingeklammerten Inhalte entfernen).

17 Stimmen

Ich verstehe wirklich nicht, warum die Antwort von JQeuery so viele Stimmen erhalten hat. Ich weine um die Gemeinschaft der Webentwickler.

2 Stimmen

Alles, was Ihnen wirklich fehlt, ist ein Argument in Ihrem Tastendruck-Handler und ein e.preventDefault() damit es mit Formularen funktioniert. Siehe meine (neue) Antwort .

7 Stimmen

Wenn Sie nicht vorhaben, dass Ihre Benutzer tatsächlich Daten eingeben, sollten Sie etwas wie folgt tun if (event.keyCode == 13) { event.preventDefault(); go.click();}

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