JavaScript -Erkennung des Schlüsselpress -Kontextes (Auswahl des Formularverlaufs vs. Formular Senden)

StackOverflow https://stackoverflow.com/questions/416220

Frage

Ich schreibe mit JQuery ein Semi-Gener-Form-Plugin, um die Entwicklung des Projekts zu beschleunigen, an dem ich arbeite.

Der Plan ist, dass a jtemplates Die Vorlage enthält die Felder, mein Plugin schaut durch die Vorlage, um alle erforderlichen mehrsprachigen Ressourcen zu finden, fordert sie vom Server an und packt dann alles in ein JavaScript-Objekt, das dann an eine benutzerdefinierte Funktion "Senden" übergeben wird.

Alles funktioniert gut, außer dass der Standard "Beim Eingeben wird das Formular gesendet", den Sie ausführen müssen, wenn Sie ein Formular vornehmen:

opts.coreElement.find('input[type=text]').keypress(function(evt) {
    if ((evt.keyCode || evt.which) == 13) {
        opts.coreElement.find('.saveButton').click();
    }
});

Das Problem ist, dass ich in Firefox (zumindest andere Browser noch nicht überprüft habe). Wenn Sie zuvor Informationen in einem ähnlich benannten Textfeld eingegeben haben, erhalten Sie Ihren Formularhistorie. Wenn Sie dann einen dieser vorgeschlagenen Werte auswählen, indem Sie die Eingabetaste drücken, legt er das Formular ein. Nicht großartig, wenn Sie den ersten Eingang auf der Seite haben. Eigentlich ziemlich nervig.

Die offensichtliche Lösung scheint darin bestehen, ein Formelement um die Felder einzufügen und eine mögliche Einreichung dieser Dummy -Form über JQuery zu stoppen. Glücklicherweise habe ich den Luxus, dies zu tun, da ich in ASP.NET MVC bin, aber was wäre, wenn ich es nicht wäre? Was ist, wenn mein Plugin nicht wusste, ob es sich bereits in einem Formular befand und sich selbst für sich selbst behalten musste? Was wäre, wenn ich in Standard -Webformen ASP.net und ich wäre hatte zum manuellen "Ziel" jeder Eingabe -Rückgabetaste für die richtige Taste für die richtige Senden?

Gibt es einen Weg, vielleicht durch das Ereignisobjekt selbst, um den Kontext des Schlüsseldrucks zu erkennen, damit ich die Auswahl der Formularverlaufselemente herausfiltern kann?

War es hilfreich?

Lösung

Setzen Sie die autocomplete Attribut in Ihren Textfeldern zu off:

opts.coreElement.find('input[type=text]').each(function() {
     $(this).attr('autocomplete', 'off');
});

Dies funktioniert für alle wichtigen Browser (Safari, Firefox, dh).

Andere Tipps

Ich habe festgestellt, dass Sie, um die Standardaktion für eine [Eingaberie] oder [Registerkarte] zu verhindern, auf das Schlüsseldown -Ereignis und das Handeln und Abbrechen zu hören.
Bis zum Zeitpunkt des Auslösers von KeyUp oder Schlüsselpress ist der Standard für Keydown bereits stattgefunden.

Die Antwort von Wulong funktioniert, aber die Frage beantwortete nicht vollständig. Die vorgeschlagene Lösung besteht darin, die Geschichte des Eingabentextfelds zu deaktivieren. Aber gibt es eine Möglichkeit zu wissen, dass das Schlüssel -Ereignis aus dem Eingabetxt oder aus der Geschichte stammt?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top