Вы можете, по крайней мере теоретически, иметь в своей форме три кнопки submit
.
Кнопка два - это существующая кнопка «менее важная» (от середины формы), кнопка три - это существующая кнопка «фактическая передача» из существующей формы.
Кнопка 1 должна быть скрыта (с использованием CSS display:none
или visibility: hidden
) и должна выполнять ту же функцию, что и ваша текущая проверка. Я думаю, что это все еще будет первая кнопка, найденная браузером, независимо от ее видимости.
<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). Это некрасиво, но надежно. Также рекомендуется изменить его tabindex, чтобы он не влиял на ожидаемый порядок табуляции формы.
Есть, по крайней мере, два момента, которые я должен поднять к этому комментарию. В заказе:
- «Нормальный путь ...» Я не знал, что был нормальный путь, и представил этот вариант как возможность достичь цели, при полном понимании того, что было / есть почти наверняка множество лучших способов, особенно учитывая, что я не вижу веских причин для нескольких кнопок отправки в одной форме.
- Учитывая последнее предложение вышеупомянутого пункта, я хотел бы прояснить, что я не защищаю это. Совсем. Это выглядит как уродливый и несемантический взлом, когда у вас есть более одной кнопки отправки, при этом - в экземпляре ОП - одна кнопка, по-видимому, не является кнопкой отправки .
- Понятие "положение": абсолютное; left: -4000px; `мне пришло в голову, но это, похоже, произвело почти то же самое, что и` visibility: hidden; `, и у меня есть врожденная неприязнь к` position: absolute; `по любой причине ... поэтому я пошел с вариант, который был менее нежелателен для меня во время написания ... =)
Я ценю ваш комментарий по поводу tabindex, хотя я вообще об этом не думал.
Извините, если я выгляжу несколько странно, уже поздно, я устала ... йадда-йадда; С тех пор, как я вернулся домой, я тестировал разные браузеры, и кажется, что Firefox 3.5+ дает одинаковое поведение - «кнопка одна» в Windows XP и Ubuntu 9.10, все браузеры Webkit (Midori, Epiphany, Safari и Chrome) не работают. и сообщите «кнопку два».
Так что это определенно неудачная идея display: none;
кнопка отправки. В то время как visibility:hidden
по крайней мере работает.
<ч />
Под этим я подразумеваю, что нажатие клавиши «enter» вызвало событие отправки формы или событие нажатия первой кнопки отправки формы, независимо от того, было ли это первое представление `display: none;` или ` видимость: скрыто`.
Пожалуйста, имейте в виду, что мои навыки jQuery ограничены, поэтому использовались тесты (я запускал только один раз, чтобы попытаться предотвратить конфликты при выполнении, закомментировав тот, который я не запускал в то время, оба представлены - одно, явно закомментированное) вполне может быть недостаточным и нерепрезентативным.