Ich habe vor ein ähnliches Problem hat. Soweit ich weiß, gibt der Browser keine Ereignisse aus, wenn der Benutzer per Rechtsklick einfügt oder aus der Liste der zuvor verwendeten Werte auswählt.
Ich habe es auf eine gute Weise gelöst, indem ich zusätzlich meinen Event-Handler an das Blur-Event gebunden habe. Der einzige Fall, der nicht erfasst wurde, war, wenn sie einen Wert mit der Maus einfügen und dann die Eingabetaste zum Senden drücken. Ich war in der Lage, um diesen durch ein kleines hackery zu bekommen:
$(element)
.bind('keydown blur', handlerFunction)
.keydown(function(event) {
if (event.keyCode === 13 /* Enter Key */) {
event.preventDefault();
event.stopPropagation();
}
})
.keyup(function(event) {
if (event.keyCode === 13 /* Enter Key */) {
$(this).closest('form').submit();
}
});
Im Wesentlichen das funktioniert, weil jQuery wird die Ereignisse in der Reihenfolge ausgeführt, sie gebunden waren. Normalerweise erfolgt die Übermittlung des Formulars auf dem Keydown einer Enter-Taste. Um die keyup Handler Zeit zu geben, seine Magie zu tun, müssen Sie dieses Formular Vorlage verzögern, bis das keyup Ereignis eintritt, so dass die andere keyup Handler zuerst ausgeführt werden können.
Jetzt haben Sie gesagt, dass Sie ein Plugin verwendet haben, das eine Verzögerung hinzufügt, bevor Sie auf das Benutzerereignis reagieren. Das bedeutet, dass Sie diese Technik wörtlich nicht verwenden können. Eine Sache, die stattdessen funktionieren könnte, wäre, die Handler-Funktion direkt aufzurufen, bevor das Senden des Formulars zugelassen wird. Um das zu tun, würden Sie den letzten keyup Handler ändern:
.keyup(function(event) { // Part 2
if (event.keyCode === 13 /* Enter Key */) {
handlerFunction.call(this, event); // force it to happen now
$(this).closest('form').submit();
}
});
Als Josh K bereits erwähnt, können Sie einfach etwas zu der Veranstaltung vorlegen binden auf dem Formular etwas ähnliches zu tun. Wenn Sie es Ajax tun, aber sicher sein, async: false
in den übergebenen Optionen setzen, denn sonst wird das Formular gehen Sie vor und legt für den Anruf ohne zu warten, zu vervollständigen.