Если в HTML-форме есть две кнопки <input type = "submit">, как узнать, на какую кнопку нажали? - PullRequest
43 голосов
/ 25 января 2010

Предположим, у меня есть следующая HTML-форма:

<form>
...
<input type="submit" name="queue" value="Queue item">
<input type="submit" name="submit" value="Submit item">
</form>

Как узнать, на какую кнопку нажал пользователь (без использования javascript)?

Я просмотрел отправленные данные, и кажется, что при нажатии "Queue Item" на сервер отправляется "queue" = "Queue Item". А когда нажата "Submit item", отправляется "submit" = "Submit item" наборов.

Могу ли я положиться на это поведение? Это задокументировано где-то в стандарте на HTML-формах? Как вы, ребята, делаете это?

Ответы [ 4 ]

54 голосов
/ 25 января 2010

Да, вы можете положиться на это; это полностью задокументировано здесь . Конкретные соответствующие строки говорят:

Когда форма отправляется на обработку, имя некоторых элементов управления связывается с их текущим значением, и эти пары передаются вместе с формой. Те элементы управления, для которых представлены пары имя / значение, называются успешными элементами управления.

и

Если форма содержит более одной кнопки отправки, успешной будет только активированная кнопка отправки.

5 голосов
/ 25 января 2010

Да, вы можете положиться на это поведение.

Когда нажата <input type="submit" name="queue" value="Queue item">, поле «очередь» будет установлено, а «отправить» не будет.

В то время как при нажатии на другую будет установлено поле «отправить»и "очереди" не будет.

Если вы не уверены в этом, вы можете разделить их на 2 формы и работать с ними таким образом.

3 голосов
/ 25 января 2010

Вы можете положиться на это поведение. Вы получаете значение ввода. Я бы использовал javascript для переключения скрытого значения формы, но так как вы не упомянули javascript, у вас нет нескольких вариантов выбора.

Это стандарт. Поскольку это тег input и имеет value, это означает, что вы получите value отправленный.

0 голосов
/ 25 января 2010

Разделите форму на две формы, реплицируя любые другие входные данные, необходимые для другого действия. Или, если вам действительно нужно знать, хочет ли пользователь «поставить или поставить в очередь» элемент, измените обе кнопки отправки на выбор радио, чтобы переключаться между этими двумя вариантами, и добавьте новую отдельную кнопку «отправить форму».

В этой ситуации, если вы хотите использовать параметр одним щелчком, вы можете использовать Javascript, чтобы определить, когда выбрана одна из переключателей, и мгновенно автоматически отправить форму. (Использование Javascript для пользовательского интерфейса, а не для обработки форм)

...