Ответ 1
Вы могли бы теоретически, по крайней мере, иметь три submit
кнопки в вашей форме.
Кнопка two - это существующая "менее важная" кнопка (от половины до формы), кнопка три - это существующая кнопка "фактический-отправить" из вашей существующей формы.
Кнопка должна быть скрыта (с использованием CSS display:none
или visibility: hidden
) и должна выполнять точно ту же функцию, что и текущая 'actual-submit'. Я думаю, что это будет первая кнопка, которая будет найдена браузером, независимо от ее видимости.
<form method="post" method="whatever.php" enctype="form/multipart">
<fieldset id="first">
<label>...<input />
<label>...<input />
<label>...<input />
<input type="submit" value="submit" style="visibility: hidden;" <!-- or "display: none" --> />
<input class="less_important" type="submit" value="submit" />
</fieldset>
<fieldset id="second">
<label>...<input />
<label>...<input />
<label>...<input />
<input type="submit" value="submit" class="actual_submit" />
</fieldset>
</form>
Отредактировано в ответ на комментарии:
Я думал, что скрытые кнопки также были отключены по умолчанию? [Md5sum]
Действительная точка, но я допустил ошибку тестирования только в Firefox (3.5.7, Ubuntu 9.10) перед публикацией, в которой метод работал 1 для обоих. Полный файл xhtml вставляется (ниже), который впоследствии формирует основу моего тестирования для этих комментариев.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>3button form</title>
<link rel="stylesheet" type="text/css" href="css/stylesheet.css" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(document).ready(
function() {
$('input[type="submit"]').click(
function(e){
alert("button " + $(this).attr("name"));
}
);
}
);
</script>
</head>
<body>
<form method="post" method="whatever.php" enctype="form/multipart">
<fieldset id="first">
<label>...<input />
<label>...<input />
<label>...<input />
<input name="one" type="submit" value="submit" style="display:none;" /><!-- or "display: none" -->
<input name="two" class="less_important" type="submit" value="submit" />
</fieldset>
<fieldset id="second">
<label>...<input />
<label>...<input />
<label>...<input />
<input name="three" type="submit" value="submit" class="actual_submit" />
</fieldset>
</form>
</body>
</html>
display: none
должен помешать кнопке быть активной частью формы (включенной в результирующий набор и имеющей право на кнопку по умолчанию);visibility: hidden
не должен. Однако некоторые из этих случаев ошибочны некоторыми браузерами. Обычный способ иметь невидимую первую кнопку отправки -position: absolute;
и переместить ее с страницы (например, с левым: -4000px). Это уродливое, но надежное. Также полезно изменить свой табуиндекс, чтобы он не вмешивался в ожидаемый порядок табуляции.
Есть, по крайней мере, два момента, которые я должен поднять к этому комментарию. В порядке:
- "Нормальный путь..." Я не знал, что был нормальный путь, и представил этот вариант как возможность достичь цели, полностью осознав, что существует/почти наверняка любое количество лучших способов, особенно учитывая, что я не вижу веских оснований для нескольких кнопок отправки в той же форме.
- Учитывая последнее предложение вышеупомянутого пункта, я хотел бы дать понять, что я не защищаю это. Вообще. Это кажется уродливым и не смысловым, взломать несколько кнопок отправки, причем в экземпляре OP одна кнопка, по-видимому, не является кнопкой отправки.
- Понятие "позиция: абсолютное; left: -4000px; `приходил ко мне, но он, похоже, действовал так же, как" видимость: hidden ", и у меня есть врожденная неприязнь к" position: absolute "по какой-то причине... поэтому я пошел с вариант, который был менее неприятным для меня на момент написания... =)
Я ценю ваш комментарий о tabindex, хотя, это было то, о чем я никогда не задумывался, вообще.
Извините, если я немного отскакиваю, поздно, я устал... yadda-yadda; Я тестирую в разных браузерах с момента моего возвращения домой, и кажется, что Firefox 3.5+ дает такое же поведение - сообщая "одну кнопку" как на Windows XP, так и на Ubuntu 9.10, все браузеры Webkit (Midori, Epiphany, Safari и Chrome) терпят неудачу и сообщите "две кнопки".
Так что это определенно неудачная идея display: none;
кнопки отправки. В то время как visibility:hidden
по крайней мере работает.
-
Под этим я подразумеваю, что нажатие 'enter' вызвало событие form-submit или событие click первой кнопки отправки формы, независимо от того, был ли этот первый submit `display: none;` или ` видимость: hidden`.
Помните, что мои навыки jQuery ограничены, поэтому использовались тесты (я запускал только один раз, чтобы попытаться предотвратить конфликты, возникающие при выполнении, комментируя тот, который я не запускал в то время, оба представлены - один, очевидно, прокомментированный) вполне может быть недостаточным и нерепрезентативным.