[HTML] Кнопки <button> в IE

yura4773

Столкнулся сейчас с такой проблемой: в IE странным образом обрабатываются формы, содержащие несколько элементов BUTTON типа 'submit'.
Вот тестовый пример.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="ru">
<head><title>Buttons test</title></head>
<body>
<form>
<button type="submit" name="action" value="action_a">ButtonA</button>
<button type="submit" name="action" value="action_b">ButtonB</button>
<button type="submit" name="action" value="action_c">ButtonC</button>
</form>
</body>
</html>


Открываем эту страничку в браузере, щёлкаем по кнопочкам, смотрим, что происходит в адресной строке (это можно проделать без помощи веб сервера).
Opera 7.50. Результат соответствует ожиданию: при нажатии на кнопку "ButtonB" формируется URI "http://localhost/test.html?action=action_b" (с другими кнопками - аналогично).
IE 6.0. При нажатии на любую кнопку формируется URI "http://localhost/test.html?action=ButtonA&action=ButtonB&action=ButtonC", т.е. мало того, что в качестве значения элементов формы отправляется содержимое тега, а не значение атрибута 'value' (см. описание элемента BUTTON в спецификации так ещё и отправляются данные, соответствующие всем элементам BUTTON, а не только нажатой кнопке (Цитата из спецификации: "If a form contains more than one submit button, only the activated submit button is successful.").
Наконец мой вопрос. (1) Правильно ли я понимаю, что это грубая ошибка в IE (а не в моём понимании спецификации) и если так, то (2) Как обойти эту ошибку (не заменяя элементы BUTTON на элементы INPUT)?
P.S.: Если кто проверит в альтернативных браузерах - напишите, пожалуйста, результат. =)

artimon

1. Эта давно изветный баг IE.
2. Можно воспользоватся „IE7 “. Или ручками, с помощью js.

yura4773

Спасибо, . =)
1. Эта давно изветный баг IE.
Мне тока на днях стал известный.
2. Можно воспользоватся „IE7 “. Или ручками, с помощью js.
А с помощью js - это как? ...если не трудно.

artimon

Повесить обработчик на onSubmit формы. Проверять какой кнопкой был вызван submit. Остальные удалять из формы.

yura4773

Понятненько, пасибки. =)

dedwowan

Лучше вообще не юзать у сабмита возможность передавать параметр, а сразу делать хидден и записывать в него, то что нужно перед отправкой формы.
Причина проста - в случае редизайна системы, если вдруг нужно будет кнопки сделать картинками вся эта конструкция пойдет лесом.

skvoria

Русские программисты замечательны тем, что умеют создавать себе немереные проблемы, которые потом с успехом решать
Чем не устраивает существование нескольких <input type="submit" name="submit..." value="Кнопка...">
с последующим разгребанием в CGI имени сабмита? (помимо вроде небольших сложностей в стилях)
Оставить комментарий
Имя или ник:
Комментарий: