2013-05-15 4 views
6

Rozważmy następującą postać w dokumencie HTML5:Formularz HTML, przyciski wielokrotnego wysyłania, post payload ignoruje kliknięcia bez przycisków: Czy to standardowe zachowanie?

<form method="post" action="http://example.com/submit/"> 
    <button name="confirm" value="1" type="submit">Confirm</button> 
    <button name="re-send" value="1" type="submit">Re-send code</button> 
    <button name="cancel" value="1" type="submit">Cancel change</button> 
</form> 

Korzystanie z Chrome, kliknij pierwszy przycisk wywołuje żądania ładowność confirm=1. Podobnie drugi przycisk powoduje re-send=1 i trzeci cancel=1.

Badanie strony serwera z żądaniem ładunku pozwala mi określić, który z trzech przycisków został kliknięty (zakładając, że tylko jeden z trzech kluczy znajduje się w polu danych żądania).

We wszystkich przypadkach pary klucz-wartość nie klikniętych przycisków są wykluczone z ładunku żądania. Jest to bardzo przydatne.

Czy to zachowanie (że nie kliknięto klawiszem przycisku: pary wartości są wykluczone z żądania) jest standardem?

Odpowiedz

1

O ile mi wiadomo, tak.

Od HTML4 specyfikacji: http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#h-17.13.2

Każdy sukces ma swoją nazwę kontrola sterowania w połączeniu z jego bieżącej wartości jako części złożonego zestawu form danych. ... Jeśli formularz zawiera więcej niż jeden przycisk przesyłania, tylko aktywowany przycisk przesyłania działa poprawnie.

Od specyfikacji HTML5: http://www.w3.org/TR/2012/CR-html5-20121217/forms.html#the-button-element

Uwaga: Przycisk (i jego wartość) jest zawarty tylko w składaniu formularza jeśli sam przycisk został użyty do zainicjować przesłanie formularza.

jestem całkiem pewny < IE8 przedstawi zawartość elementu zamiast wartości (np confirm = Potwierdź), ale większość innych wspólnych przeglądarek powinny działać poprawnie.

Może rozważyć:

<form method="post" action="http://example.com/submit/"> 
    <button name="submit-action" value="confirm" type="submit">Confirm</button> 
    <button name="submit-action" value="re-send code" type="submit">Re-send code</button> 
    <button name="submit-action" value="cancel change" type="submit">Cancel change</button> 
</form> 

Ponadto, warto zauważyć, że niektóre starsze przeglądarki mogą mieć scenerios gdzie mogliby traktować go jak gdyby żaden przycisk został kliknięty (np formularz złożony przez javascript lub zamiast przycisku ENTER). Być może warto sobie z tym poradzić, domyślnie "potwierdzając". HTML5 w nowoczesnych przeglądarkach nie powinien jednak sprawiać ci żalu.

Powiązane problemy