jQuery serializeArray enthält nicht die Schaltfläche zum Senden, auf die geklickt wurde

Ich habe ein Formular mit zwei Schaltflächen. Eine zum Speichern eines Datensatzes und die andere zum Abbrechen des Speichervorgangs. Ich benutze dasrails.js (ein allgemeines AJAX / jQuery-Plug-In für diejenigen von euch, die es nicht wissen) Javascript-Datei, die mit jQuery für unauffällige Javascript / Ajax-Aufrufe funktioniert. Wenn ich die Formulardaten über Ajax sende, soll der Name und der Wert der Schaltfläche, auf die ich geklickt habe, zusammen mit den übrigen Daten gesendet werden, damit ich anhand der angeklickten Schaltfläche entscheiden kann, was zu tun ist.

Die Methode imrails.js Datei verwendet.serializeArray() zum Senden von Formulardaten an den Server. Das Problem ist, dass dies nicht das Name / Wert-Paar der Schaltfläche enthält, auf die ich geklickt habe. Die Website von jQuery gibt an, dass sie dies absichtlich tun (obwohl ich der Meinung bin, dass sie dies tun sollten):

"Das.serializeArray() -Methode verwendet die Standard-W3C-Regeln fürerfolgreiche Kontrollen, um zu bestimmen, welche Elemente es enthalten soll; Insbesondere kann das Element nicht deaktiviert werden und muss ein Namensattribut enthalten. Es wird kein Wert für die Schaltfläche "Senden" serialisiert, da das Formular nicht über eine Schaltfläche gesendet wurde. "

Wie können sie davon ausgehen, dass ein Formular NICHT über eine Schaltfläche gesendet wurde? Das macht keinen Sinn und eine falsche Annahme glaube ich.

Nach den W3C-Regeln wird die Schaltfläche, die zum Absenden eines Formulars aktiviert wurde, als @ betrachtesuccessful control.

Da sich die Entwickler von jQuery dazu entschlossen haben, kann ich davon ausgehen, dass es eine andere Methode gibt, die DOESN'T die aktivierte Schaltfläche in einer Serialisierung ausschließen?

EDIT: Hier ist ein kurzes Beispiel, wie mein Formular aussehen könnte ...

<!DOCTYPE html5>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
  $(document).ready(function() {
    $('#form').submit(function(e) {
      // put your breakpoint here to look at e
      var x = 0;
    });
  });
</script>
</head>
<body>
  <form id="form">
    <input name="name" type="text"><br/>
    <input name="commit" type="submit" value="Save"/>
    <input name="commit" type="submit" value="Cancel"/>
  </form>
</body>

Antworten auf die Frage(10)

Ihre Antwort auf die Frage