Geben Sie die Trigger-Taste klicken
Ich habe eine Seite mit zwei buttons. Die eine ist eine <button>
element und das andere ist ein <input type="submit">
. Die Schaltflächen werden auf der Seite angezeigt-in dieser Reihenfolge. Wenn ich in ein Textfeld eine beliebige Stelle des Formulars, und drücken Sie <Enter>
, das button-element ist click
- Ereignis ausgelöst wird. Ich nehme an, das ist, weil die button-element sitzt zuerst.
Kann ich nichts finden, dass sieht aus wie eine zuverlässige Weise des default-button, ich bin auch nicht unbedingt wollen an dieser Stelle. In der Abwesenheit von etwas besser, ich gefangen habe einen Tastendruck irgendwo auf dem Formular, und, wenn es das war <Enter>
Taste, die gedrückt wurde, ich bin einfach zu negieren:
$('form').keypress( function( e ) {
var code = e.keyCode || e.which;
if( code === 13 ) {
e.preventDefault();
return false;
}
})
Soweit ich das bisher beurteilen kann, scheint es zu funktionieren, aber es fühlt sich unglaublich ungeschickt.
Kennt jemand eine anspruchsvollere Technik, dies zu tun?
Ähnlich, gibt es irgendwelche Fallstricke, die diese Lösung, ich bin nur nicht bewusst?
Dank.
InformationsquelleAutor Rob Wilkerson | 2011-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
sollte den trick tun.
Der Grund ist, weil ein button in einem Formular hat, dessen Typ implizit festgelegt
submit
. Als zzzzBoz sagt, die Spec sagt, dass die erstebutton
oderinput
mittype="submit"
ist, was in dieser situation wird ausgelöst. Wenn Sie spezielltype="button"
, dann wird es entfernt von der Prüfung durch den browser.type="button"
scheint diese zu lösen... vielen Dank! p.s. eine Idee warum das so ist? ie8 Behandlung der Tasten, geben Sie Einreichen? Komisch.Gute Antwort, das zeigt dem browser an, welche Tasten nicht senden-Schaltflächen, so kann es das richtige zu tun ohne Neuordnung des Markups.
einfach und effektiv! Genial 😀
Antwort deckt der Grund für diese Marotte - "Eine Schaltfläche kein type-Attribut wird genauso behandelt wie eine Schaltfläche, mit deren Typ festgelegt zu unterbreiten."
Gleiches gilt für
<input type="submit"/>
(löst Sie auf) und<input type="button"/>
(nicht ausgelöst wird, klicken Sie auf)InformationsquelleAutor Maddog
Es ist wichtig zu Lesen, die HTML-Spezifikationen, um wirklich zu verstehen, was Verhalten ist zu erwarten:
Den HTML5-Spezifikation besagt ausdrücklich, was geschieht, in
implizite Beiträge
:War dies nicht ausdrücklich in der HTML4-Spezifikation, jedoch Browsern bereits umsetzen, was beschrieben ist in der HTML5-Spezifikation (das ist, warum es aufgenommen explizit).
Bearbeiten, um hinzuzufügen:
Die einfachste Antwort, die ich denken kann, ist, um Ihre submit-button als Erster
[type="submit"]
Element in der form, hinzufügen Polsterung an der Unterseite der form mit css absolut positionieren Sie den Absenden-button am unteren Rand, wo Sie möchten, es.Wow... Danke dir, guter Herr. Dies war eine zufällige finden. Ich konnte nicht einmal vorstellen, warum ein click-Ereignis wurde ausgelöst durch drücken der enter-Taste, aber Ihre quote brachte mich zu den w3.org/TR/html5/forms.html#implicit-submission
Der link ist kaputt. Ich denke, w3c.github.io/html/Sek-Formen.html#implizite-Vorlage ist die neue url.
vielen Dank für das lassen mich wissen.
InformationsquelleAutor zzzzBov
Ich glaube nicht, dass Sie müssen javascript oder CSS, um dieses Problem zu beheben.
Entsprechend der html 5 Spezifikation für Tasten eine Schaltfläche kein type-Attribut wird genauso behandelt wie eine Schaltfläche, mit der Sie seinen Typ auf "submit", also einen Knopf für die übermittlung die form. Einstellung der button-Typ "button" sollte verhindern, dass das Verhalten, das Sie beobachten.
Ich bin mir nicht sicher über browser-Unterstützung für diese, aber das gleiche Verhalten wurde in der angegebenen html-4.01-Spezifikation für Tasten so erwarte ich es ziemlich gut.
InformationsquelleAutor Leinster
Durch drücken von 'Enter' auf konzentriert
<input type="text">
Sie "trigger" klicken Sie auf " Veranstaltung auf das erste element positioniert:<button>
oder<input type="submit">
. Wenn Sie die Taste 'Enter' in<textarea>
Sie macht einfach eine neue text-Zeile.Siehe Beispiel hier.
Dein code verhindert, um eine neue Textzeile in
<textarea>
, so haben Sie zu fangen-Taste nur für<input type="text">
.Aber warum müssen Sie drücken
Enter
im text-Feld? Wenn Sie möchten, senden Sie das Formular durch drücken von 'Enter', aber die<button>
bleiben muss, die erste im layout, spielen Sie einfach mit dem markup: legen Sie die<input type="submit">
code vor der<button>
und verwenden Sie CSS, um das layout speichern, die Sie benötigen.Fangen Sie "Enter" und speichern markup:
InformationsquelleAutor Feniks502
Können Sie im javascript-block des Formulars, bis die richtige Zeit. Ein sehr rüdes Beispiel:
Drücken der EINGABETASTE wird noch auslösen der form zu übergeben, aber das javascript wird halten Sie tatsächlich Einreichen, bis Sie die Taste drücken.
InformationsquelleAutor Dave
Drücken der EINGABETASTE in einem Formular-Textfeld wird standardmäßig das Formular abschicken. Wenn Sie nicht wollen, dass es funktioniert, die Möglichkeit haben, erfassen Sie die enter-Taste drücken und konsumieren, wie Sie es getan haben. Es gibt keinen Weg, um dieses. Es wird so funktionieren, auch wenn es keine Schaltfläche im Formular vorhanden.
click
Aktion auf die Schaltfläche Elemente wünschen, ist eine unbeabsichtigte FolgeSind Sie richtig. So oder so, das Ergebnis ist das gleiche - Sie erfassen die enter-Taste, um zu verhindern, dass unerwünschte form übermittelt.
InformationsquelleAutor Sparafusile
Wo immer Sie einen
<button>
element standardmäßig ist der Auffassung, dass die Tastetype="submit"
also, wenn Sie definieren die Schaltflächetype="button"
dann nicht berücksichtigen, dass<button>
als submit-button.InformationsquelleAutor Ramki
Ich würde es wie folgt aus: In der Behandlungsroutine für das Ereignis onclick des button (nicht submit) finden Sie im event-Objekts ein. Wenn es "geben" würde ich "false" zurück.
Dann denke ich, Sie tun es auf die harte Weise - behandeln Sie das onkeydown-Ereignis auf dem button. Die handler übergeben wird ein keyEvent; überprüfen Sie die keyCode -> wenn 13, preventDefault. Auf diese Weise können Sie tatsächlich lassen Sie Benutzer drücken Sie auf diese Taste, ohne den Nebeneffekt der Ausführung der click-Ereignis.
InformationsquelleAutor Satyajit
Meine situation hat zwei
Submit
Schaltflächen in der Formular-element:Update
undDelete
. DieDelete
- Taste löscht ein Bild und dieUpdate
Schaltfläche aktualisiert die Datenbank mit den text-Feldern im Formular.Weil die
Delete
button wurde zuerst in der form, es war die Standard-Schaltfläche aufEnter
- Taste. Nicht das, was ich wollte. Die Benutzer erwarten würden, um in der Lage sein zu schlagenEnter
nach dem Wechsel einige text-Felder.Fand ich meine Antwort auf die Einstellung der Standard-Schaltfläche hier:
Ohne Skript, definierte ich die form, die jeder Taste gehört, mit der
<button> form="bla"
Attribut. Ich habe dieDelete
Schaltfläche, um ein Formular, das nicht vorhanden ist, und legen Sie dieUpdate
- button, den ich auslösen wollte auf dieEnter
Schlüssel zu der form, die der Benutzer würden, wenn Sie text eingeben.Dies ist die einzige Sache, die für mich gearbeitet hat, so weit.
InformationsquelleAutor Dan Vachon
Dom Beispiel
javascript
wenn Sie nicht preventDefault(), andere Tasten werden ausgelöst.
InformationsquelleAutor Mehmet Kus
Ich habe einen button von Typ "submit" als erstes element in der form und machte es unsichtbar (
width:0;height:0;padding:0;margin:0;border-style:none;font-size:0;
). Funktioniert wie ein refresh der Seite, d.h. ich mache nicht alles, wenn die Taste gedrückt wird, außer, dass die Seite wieder geladen. Für mich funktioniert...InformationsquelleAutor torabe