Ich versuche, den Wert der Schaltfläche "Senden" zu ermitteln, die das Senden des Formulars ausgelöst hat
$("form").submit(function() {
});
Ich könnte möglicherweise ein $ ("input [type = submit]"). Click () -Ereignis für jede Schaltfläche auslösen und eine Variable festlegen, aber das scheint weniger elegant zu sein als das Ziehen der Schaltfläche aus dem Formular beim Senden.
formobj.submit()
. Ich denke, Klickereignisse sind der richtige Weg.event.submitter
worauf Sie klicken<button>
oder<input type="submit">
was angeklickt wurde.Antworten:
Ich habe
document.activeElement
wie in dieser Antwort skizziert genutzt: Wie erhalte ich das fokussierte Element mit jQuery?Ich nutze die Tatsache, dass die Schaltfläche nach dem Klicken immer das fokussierte Element ist. Dies funktioniert nicht , wenn Sie
blur()
direkt nach dem Klicken ein ausführen.@Doin hat einen weiteren Nachteil entdeckt. Wenn ein Benutzer das Formular über
enter
in einem Textfeld sendet,document.activeElement
ist das nicht festgelegt. Sie müssten selbst darauf achten, indem Siekeypress
Ereignisse ininput[type="text"]
und ähnlichem behandeln.Update 2017-01: Für meine Bibliothek Hyperform habe ich mich dafür entschieden, nicht
activeElement
alle Ereignisse zu verwenden, sondern diese abzufangen, die zur Übermittlung des Formulars führen. Der Code dafür ist auf Github.Wenn Sie Hyperform verwenden, können Sie auf folgende Weise auf die Schaltfläche zugreifen, die das Senden ausgelöst hat:
quelle
activeElement
, da der "Übermittler" definiert werden kann: A. Durch authentische Klickaktivierung (direkt mit der Maus oder der Tastatur geklickt Leertaste / Eingabetaste); B. Durch synthetische Klickaktivierung (buttonElement.click()
oderbuttonElement.dispatch(new MouseEvent(...))
ohne den Fokus zu verändern); C. über Formular implizite Übermittlung (Tastaturinteraktion mit dem Feld eines anderen Formulars) D. zu keiner, wennformElement.submit()
Ich habe dies implementiert und ich nehme an, es wird reichen.
und dies ist das Submit-Button-Ereignis, das es einrichtet
Vielen Dank für die Antworten, aber das ist nicht besonders unelegant ...
quelle
doNotSubmit
Klasse zu geben , innerhalb der FunktiondoNotSubmit
"Senden" zu prüfen, ob die Klasse nicht vorhanden ist (andernfalls nicht senden), innerhalb des Klickereignisses die Formularklasse zu entfernen und einen $ (''. MyForm '). Trigger auszuführen ('einreichen'); nach dem Hinzufügen des Submit-Button-Werts als verstecktes FeldIch habe ein Testformular erstellt und mithilfe von Firebug diesen Weg gefunden, um den Wert zu erhalten.
Leider unterstützt nur Firefox dieses Ereignis.
quelle
Hier ist ein Ansatz, der für meine Zwecke sauberer erscheint.
Erstens für alle Formen:
Wenn dieses Klickereignis für ein Formular ausgelöst wird, zeichnet es einfach das Ursprungsziel (im Ereignisobjekt verfügbar) auf, auf das später zugegriffen werden soll. Dies ist ein ziemlich breiter Strich, da er für jeden Klick irgendwo auf dem Formular ausgelöst wird. Optimierungskommentare sind willkommen, aber ich vermute, dass sie niemals erkennbare Probleme verursachen werden.
Dann können Sie in $ ('form'). Submit () mit so etwas wie abfragen, was zuletzt angeklickt wurde
quelle
submitter
Das Submit-Ereignis enthält jetzt eine Standardeigenschaft .Bereits in Firefox implementiert!
Verwenden Sie für Browser, die dies nicht unterstützen, diese Polyfüllung :
quelle
Gemäß diesem Link enthält das Ereignisobjekt ein Feld
Event.target
, das:Gibt eine Zeichenfolge zurück, die das Objekt darstellt, das das Ereignis ausgelöst hat.
Ich habe gerade eine Seite erstellt, auf der getestet wird, was dieser Wert ist, und es sieht so aus, als ob diese Darstellung für das Formular selbst und nicht für die angeklickte Schaltfläche gilt. Mit anderen Worten, Javascript bietet nicht die Möglichkeit, die angeklickte Schaltfläche zu bestimmen.
In Bezug auf die Lösung von Dave Anderson ist es möglicherweise eine gute Idee, dies in mehreren Browsern zu testen, bevor Sie es verwenden. Es ist möglich, dass es gut funktioniert, aber ich kann es nicht so oder so sagen.
quelle
target
gibt das gesamte Formular zurück. Daher ist es leider nicht hilfreich, den richtigen Submit-Button zu erkennen.Event.target
ist keine Zeichenfolge. Es ist einEventTarget
Objekt, in diesem Fall das übermittelte Formular selbst.Ein sauberer Ansatz besteht darin, das Klickereignis für jede Formularschaltfläche zu verwenden. Es folgt ein HTML-Formular mit Schaltflächen zum Speichern, Abbrechen und Löschen:
Es folgt die Abfrage. Ich sende die entsprechende 'Aktion' an dieselbe Serverfunktion, je nachdem, auf welche Schaltfläche geklickt wurde ('Speichern' oder 'Löschen'). Wenn auf "Abbrechen" geklickt wird, lade ich die Seite einfach neu.
quelle
Ich suchte und fand verschiedene Möglichkeiten, um die Senden- Schaltfläche
name
+value
mit jQuery + AJAX an den Server zu senden. Ich mochte sie nicht sehr ...Eines der besten war die hier vorgestellte Jägerlösung!
Aber ich habe selbst einen anderen geschrieben.
Ich möchte teilen, weil es gut ist und bei Bedarf auch mit Formularen funktioniert, die über Ajax geladen wurden (nach document.ready):
Einfach! Wenn Sie auf die Schaltfläche "Senden" klicken, wird dem Formular ein ausgeblendetes Feld hinzugefügt, das dieselbe
name
undvalue
die Schaltfläche "Senden" verwendet.BEARBEITEN: Die folgende Version ist leichter zu lesen. Außerdem werden zuvor angehängte ausgeblendete Felder entfernt (im Fall des zweimaligen Absendens desselben Formulars, was bei Verwendung von AJAX durchaus möglich ist).
Verbesserter Code:
quelle
<button/>
s dasselbename
Attribut haben. Ich würde eine Klasse verwenden und in Ihrer darauf verweisen.remove()
.name
Attribut meine . Wenn das Formular wiederverwendet wird und Übermittlungseingaben mit unterschiedlichen Namen enthält, können die alten Eingaben das Formular überladen.<button/>
Element nicht erwähnt haben, während<input type="submit" />
es im Code verwendet wird ...)Ich habe einige der bereitgestellten Beispiele ausprobiert, aber sie haben für unsere Zwecke nicht funktioniert.
Hier ist eine Geige zu zeigen: http://jsfiddle.net/7a8qhofo/1/
Ich war mit einem ähnlichen Problem konfrontiert, und so haben wir das Problem in unseren Formularen gelöst.
quelle
( Veranstaltung )
quelle
Sie können dies mit "event.originalEvent.x" und "event.originalEvent.y" versuchen:
quelle
jQuery scheint diese Daten für das Übermittlungsereignis nicht bereitzustellen. Sieht so aus, als wäre die von Ihnen vorgeschlagene Methode die beste Wahl.
quelle
Nur eine andere Lösung, da keine andere meine Anforderungen erfüllte. Der Vorteil ist, dass Klick und Tastendruck (Enter und Leertaste) erkannt werden.
Das hat bei mir am besten funktioniert.
quelle
Mit einem spezifischeren Ereignishandler und JQuery ist Ihr Ereignisobjekt die Schaltfläche, auf die geklickt wird. Bei Bedarf können Sie das Delegierungsformular auch von dieser Veranstaltung erhalten.
Dieses Dokument enthält alles, was Sie für den Einstieg benötigen. JQuery Doc .
quelle
Ich schreibe diese Funktion, die mir hilft
und dann verwenden
quelle