2010-08-21 4 views

Antwort

5

Das Ereignis "submit" wird nicht durch die Schaltfläche ausgelöst, sondern durch das "Formular" ausgelöst. dies Ein schneller Test beweist:

<form id="myform"> 
    <input id="email" type="text" value="1st Email" /> 
    <input id="action1" type="submit" value="Action 1" /> 
    <input id="action2" type="submit" value="Action 2" /> 
    </form> 

    <script type="text/javascript"> 

    document.getElementById("myform").onsubmit = function(evt) { 
     var event = evt || window.event; 
     alert(event.target.id); // myform 
     alert(event.explicitOriginalTarget.id); // action2 (if action2 was clicked) 
               // but only works in firefox! 
    } 

    </script> 

Obwohl in firefox, Sie event.explicitOriginalTarget Eigenschaft auf Ereignis verwenden können, um die Eingabe zu bekommen (abschicken), auf den geklickt wurde verursacht das Ereignis vorlegen abgefeuert werden. (Wenn Sie wissen wollen)

So besten Optionen für Sie sind:

  • Haben Sie einen anderen Wert auf Ihre einreichen Tasten ODER
  • Haben diejenigen, die als normale Tasten und klicken Sie auf Handler, um sie über Javascript.
+0

Danke. Ich dachte an die Onclick-Handler. Es scheint, es gibt keinen sauberen Weg (zumindest nicht cross-browser) – GetFree

+0

Ich bin wirklich überrascht, dass diese Funktionalität verfügbar ist, aber nachdem Sie auf diese Frage (und mehrere ähnliche), scheint es einfach nicht da ist. Lame. – MandM

1

Es gibt ein paar Möglichkeiten, die ich mir vorstellen kann.

Sie können verschiedene Werte verwenden, und Ihr unauffälliges Javascript kann dabei helfen.

Eine Diskussion zu diesem Ansatz (verschiedene Werte für jede Taste) ist hier:

http://www.chami.com/tips/internet/042599I.html

ich für jede Taste mit der Verwendung von verschiedenen name Attributen gehen neigen.

Ein Blog über das heißt hier: http://www.codetoad.com/javascript/multiple.asp

ich entweder von diesen nicht folgen, der Ansatz von verschiedenen Faktoren abhängen wird am besten funktionieren wird, wie werden Sie die Tasten in Javascript einreichen Handhabung, oder wird der Server das Formular bekommen, dann muss er herausfinden, was der Benutzer wollte.

Persönlich bevorzuge ich den Ajax-Ansatz, jetzt, wo ich nur Ereignisse an die Schaltflächen anhängen, nachdem die Seite geladen wird, mit unaufdringlichen Javascript und dann basierend auf der Benutzerwahl auf die richtige Funktion, aber das aufrufen hängt davon ab, ob Sie der HTML-Seite einen Skriptlink hinzufügen können.

UPDATE:

Um dies mit Javascript zu tun, ist der einfachste Weg, ein Ereignis auf dem Klick auf den Button zu befestigen, und dann auf den Namen schauen, um zu entscheiden, wie es zu handhaben.

In Wirklichkeit muss das Formular nie wirklich an den Server gesendet werden, aber Sie können alles im Hintergrund behandeln, indem Sie die Parameter (Optionen) einpacken und an den Server senden und den Benutzer die Ergebnisse wissen lassen.

+0

Ja, andere Namen ist der Weg zu gehen. Die Überprüfung der Werte ist konzeptionell falsch, da diese Werte Teil der GUI sind. – GetFree

1

Wird ein Ereignis-Listener auf jeder Schaltfläche als Code hinzugefügt? Andernfalls gibt es keine Möglichkeit zu sehen, welche Schaltfläche das Submit-Ereignis ausgelöst hat, es sei denn, Sie wollen sich schmutzig machen und die Mausposition während des Ereignisses berechnen und sie mit den Tastenpositionen vergleichen.

Andernfalls wäre die nächstbeste Sache, einen Ereignishandler für das click -Ereignis der Schaltfläche zuzuweisen und den Namen dieser Schaltfläche einer Variablen zuzuordnen, die Sie im submit-Ereignis des Formulars überprüfen können.

+1

Ich hatte davor Angst. Schade. – GetFree

1

Entschuldigung, diesen sehr alten Thread aufzuwärmen. Die Frage war hier nicht beantwortet worden, aber hier wurden nur Ansätze für praktische Umgehungslösungen angegeben.

Aber das Event-Objekt enthält Informationen darüber, welches Objekt es initiiert hat. In einem Handler b4submit (e) können Sie den Absende-Button wie diese:

function b4submit(e) { 
    var but = e.originalEvent.explicitOriginalTarget; 
    ... 
} 

Und doch ist ein HTML-Objekt mit allen Attributen Sie es mit, wie Name usw., id, Wert zugewiesen haben .

Ich kam nach ein paar Debugging, und ich dachte, es könnte von größerem Interesse als eine saubere Lösung für dieses Problem sein.

+0

Die angenommene Antwort erwähnt bereits 'explicitOriginalTarget'. Es ist eine mozilla-spezifische Eigenschaft. – GetFree