Какая кнопка была нажата?

#html #forms #jstl

#HTML #формы #jstl

Вопрос:

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

У меня есть форма с несколькими кнопками в ней, которые отправляют, и я должен знать, какая кнопка была нажата.

небольшой фрагмент кода внутри формы может выглядеть следующим образом:

 <input type="submit" name="action" value="<fmt:message key="ID001"/>"/> <!-- Save -->  
<input type="submit" name="action" value="<fmt:message key="ID002"/>"/> <!-- Delete --> 
<input type="submit" name="action" value="<fmt:message key="ID003"/>"/> <!-- some other action -->
  

Часть fmt: message просто учитывает язык клиента и помещает слово на кнопку.

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

Поскольку значения кнопок являются переменными, как я могу подойти к этому? (По сути, я могу это сделать, если на входе было место для указания значения =»» и текста =»», но это не так)

Я подумал о том, чтобы переместить нужные мне «значения», такие как «сохранить» и «удалить», в атрибут name и проверить, установлено ли значение, выполнив что-то вроде следующего:

 <c:if test="${!empty param.save}">
.
.
.
</c:if>
  

Однако проблема возникает, когда у меня есть, скажем, список размера x, каждый из которых может быть удален.
Я приведу вам пример того, что я имею в виду:

форма jsp:

 <input type="submit" name="delete_row|1" value="<fmt:message key="ID001"/>"/> <!-- delete first row-->  
<input type="submit" name="delete_row|2" value="<fmt:message key="ID002"/>"/> <!-- deleted second row --> 
<input type="submit" name="delete_row|3" value="<fmt:message key="ID003"/>"/> <!-- delete third row -->
...
  

jsp на стороне сервера:

 <c:if test="${!empty param.delete_row|x}"> 
.
. <%-- handle the specific row deletion here--%>
.
</c:if>
  

^- Я понятия не имею, каким будет этот x … это может быть 1, или 100, или даже больше, поэтому мне нужен способ найти любой параметр, начинающийся с delete_row, и как-то его разграничить.

Я немного изучил его и нашел <button> элемент, однако он не поддерживается в некоторых версиях IE (IE<8, насколько я помню?).

Итак, мои ограничения таковы:

  • нет js
  • должен поддерживаться браузерами, такими же старыми, как IE6 или, предпочтительно, даже более

У кого-нибудь есть какие-нибудь предложения? Пожалуйста, прокомментируйте, если мне нужно что-то объяснить более подробно,

Ответ №1:

Используйте button вместо input :

 <button name='submit' type='submit' value='1'><fmt:message key="ID001"/></button>
<button name='submit' type='submit' value='2'><fmt:message key="ID002"/></button>
<button name='submit' type='submit' value='3'><fmt:message key="ID003"/></button>
  

И если вы хотите иметь кнопку с возможностью нажатия, но не отправляете форму, добавьте type='button' к ней.

Комментарии:

1. Спасибо за быстрый ответ, Юстинас. Меня беспокоит то, что элемент <button> не поддерживается более старыми версиями IE, поэтому я задавал этот вопрос, чтобы найти другой способ обойти это. Возможно, в конечном итоге мне придется поговорить об этом с моим боссом, но, насколько я знаю, большое количество людей все еще используют очень старые версии IE, и поэтому я должен его поддерживать.

Ответ №2:

Насколько я понимаю, и надеюсь, что кто-нибудь поправит меня, если я ошибаюсь, спецификации HTML не предоставляют то, что вы ищете в случае использования. Который, кстати, рекомендовал бы вам посмотреть в спецификациях HTML4.

Итак, либо вы не поддерживаете старые браузеры, либо используете Java script. В обоих случаях вам нужно будет поговорить с вашим боссом.