Schaltflächenklick-Ereignis wird ausgelöst, wenn die Eingabetaste in einer anderen Eingabe gedrückt wird (keine Formulare)
Lesezeit: 4 Minuten
Kontaktmatt
Diese Logik wird ausgelöst, wenn Sie in der Eingabe “Betrag” die Eingabetaste drücken, und ich glaube nicht, dass dies der Fall sein sollte (in Chrome nicht). Wie kann ich dies verhindern, und wenn nicht im IE verhindern, behandeln Sie es so, dass die Logik im Klickereignis nicht ausgelöst wird.
$("#btnShare").click(function (e) {
// This logic is firing when pressing "Enter" in the "Amount" input
});
JQuery: 1.7.2
IE 9
(Funktioniert in Chrome)
Entgegen der Frage ist mir das gerade mit Chrome und Firefox passiert. Gleiche Lösung (Tastentyp).
– Tim Grant
24. Juni 2016 um 18:36 Uhr
Palati
Ich hatte das gleiche Problem und habe es durch Hinzufügen gelöst type="button" Attribut zu <button> -Element, wodurch IE die Schaltfläche als einfache Schaltfläche und nicht als Senden-Schaltfläche betrachtet (was das Standardverhalten einer <button> Element).
“Tipp: Geben Sie immer das type-Attribut für das
Dies hat bei mir funktioniert, aber ich musste auch verhindern, dass die Eingabetaste das Formular absendet, das mein <input> ist in, weil wir in meinem Fall nicht möchten, dass Benutzer automatisch die Eingabetaste drücken, nachdem sie einen Wert in dieses eine Feld eingegeben haben, um das gesamte Formular abzusenden, also brauchte ich in meinem Fall auch so etwas wie on(theInputElement, 'keyDown', function (e) { if (e.key === 'Enter') { e.preventDefault(); } }); .. dachte, das könnte anderen in der gleichen Situation helfen. (Ich verwende hier Dojos dojo/on, jquery würde genauso gut funktionieren)
– Neek
9. Februar 2017 um 10:24 Uhr
Ich bin heute auf dieses Problem gestoßen. IE geht davon aus, dass Sie das Formular absenden möchten, wenn Sie in einem der Textfelder die Eingabetaste drücken – auch wenn die Felder nicht Teil eines Formulars sind und auch wenn die Schaltfläche nicht vom Typ „Senden“ ist.
Sie müssen das Standardverhalten von IE mit preventDefault() überschreiben. Geben Sie in Ihrem jQuery-Selektor das div ein, das die Textfelder enthält, die Sie ignorieren möchten, die Eingabetaste – in Ihrem Fall das div “page”. Anstatt das gesamte div auszuwählen, können Sie auch die Textfelder angeben, die Sie ignorieren möchten.
$('#page').keypress(function(e) {
if(e.which == 13) { // Checks for the enter key
e.preventDefault(); // Stops IE from triggering the button to be clicked
}
});
Gilherme
Ich hatte dieses Problem mit ASP.NET WebForms:
<asp:Button />
Dies kann NICHT durch einfaches Hinzufügen von type=”button” gelöst werden, da ASP.NET es durch type=”submit” ersetzt (Sie können dieses Verhalten im Browser sehen, wenn Sie das Element untersuchen).
Der richtige Weg, dies in asp.net zu tun, ist das Hinzufügen
<asp:Button UseSubmitBehavior="false" />
zum Knopf. ASP fügt automatisch das type=”button”-Attribut hinzu.
IE denkt jeder button Element ist ein einreichen Schaltfläche (ob Sie eine form oder nicht). Es behandelt auch die Presse des Enter Geben Sie ein Formularelement als implizite Formularübermittlung ein. Da es also denkt, dass Sie versuchen, Ihr Formular abzusenden, glaubt es, dass es Ihnen helfen wird, und löst das aus click Ereignis auf (was es denkt) das einreichen Taste.
Sie können eine anhängen keyup Ereignis zu entweder dem input oder der button und prüfen Sie die Enter Schlüssel (e.which === 13) und return false;
lschult2
Eine jQuery-basierte Lösung, die dies für jede Schaltfläche tut, ist:
$('button').prop('type', 'button'); // To prevent IE from treating every button as a submit and firing a click() event
Das Click-Ereignis wird jedoch aus irgendeinem Grund immer noch zu übergeordneten Elementen sprudeln …
Für Chrome können Sie hinzufügen <button type="submit" style="display:none"/>
Weil in Chrome der Standard-Schaltflächentyp “Senden” ist
Für den IE habe ich es gleich mit versucht type="button"(Im IE ist der Standard-Schaltflächentyp “button”) Hat aber nicht gut funktioniert.
Hier ist also die Lösung. In HTML hinzufügen (keypress)=xxx($event) in deinem Formular. Im TS,
Entgegen der Frage ist mir das gerade mit Chrome und Firefox passiert. Gleiche Lösung (Tastentyp).
– Tim Grant
24. Juni 2016 um 18:36 Uhr