Несколько кнопок отправки в HTML-форме-назначить одну кнопку по умолчанию
У меня есть форма, которая имеет три кнопки Подтвердить следующим образом:
<input type="submit" name="COMMAND" value="‹ Prev">
<input type="submit" name="COMMAND" value="Save">
<input type="reset" name="NOTHING" value="Reset">
<input type="submit" name="COMMAND" value="Next ›">
<input type="button" name="NOTHING" value="Skip ›" onclick="location = 'yada-yada.asp';">
строка кнопок представляет собой сочетание кнопок submit, reset и javascript. Порядок кнопок может быть изменен, но в любом случае кнопка сохранения остается между кнопками prev и next. Проблема здесь заключается в том, что когда пользователь нажимает "enter", чтобы отправить форму, переменная post "COMMAND" содержит "Prev"; нормально, так как это первая кнопка отправки в форме. Однако я хочу, чтобы кнопка" Далее " была вызвана когда пользователь отправляет форму с помощью кнопки enter. Вроде как установить его в качестве кнопки отправки по умолчанию, хотя есть и другие кнопки перед ним.
9 ответов:
мое предложение не бороться с этим поведением. Вы можете эффективно изменить порядок с помощью поплавков. Например:
<p id="buttons"> <input type="submit" name="next" value="Next"> <input type="submit" name="prev" value="Previous"> </p>С:
#buttons { overflow: hidden; } #buttons input { float: right; }будет эффективно отменить заказ и, таким образом, кнопка "Далее" будет значение срабатывает при нажатии enter.
этот вид техники будет охватывать многие обстоятельства, не прибегая к более хакерским методам Javascript.
первая кнопка всегда по умолчанию; она не может быть изменена. Пока ты можете попробуйте исправить это с помощью JavaScript, форма будет вести себя неожиданно в браузере без сценариев, и есть некоторые угловые случаи удобства/доступности, о которых нужно подумать. Например, код, связанный с Zoran, случайно отправит форму на Enter press в
<input type="button">, что обычно не происходит, и не поймает поведение IE при отправке формы для ввода нажмите на другое не содержимое поля в форме. Так что если вы нажмете на какой-то текст в<p>в форме с этим скриптом и нажмите Enter, будет отправлена неправильная кнопка... особенно опасно, если, как указано в этом примере, кнопка по умолчанию "удалить"!мой совет-забыть об использовании скриптовых хаков для переназначения дефолтности. Идите с потоком браузера и просто поместите кнопку по умолчанию в первую очередь. Если вы не можете взломать макет, чтобы дать вам на экране вы хотите, то вы можно сделать это, имея фиктивную невидимую кнопку сначала в источнике, с тем же именем / значением, что и кнопка, которую вы хотите использовать по умолчанию:
<input type="submit" class="defaultsink" name="COMMAND" value="Save" /> .defaultsink { position: absolute; left: -100%; }(Примечание: позиционирование используется для нажатия кнопки за пределами экрана, потому что
display: noneиvisibility: hiddenесть браузер-переменные побочные эффекты от того, принимается ли кнопка по умолчанию и передается ли она.)
Quick'n'Dirty вы можете создать скрытый дубликат кнопки submit, который следует использовать при нажатии enter.
пример CSS
input.hidden { width: 0px; height: 0px; margin: 0px; padding: 0px; outline: none; border: 0px; }пример HTML
<input type="submit" name="next" value="Next" class="hidden" /> <input type="submit" name="prev" value="Previous" /> <input type="submit" name="next" value="Next" />Если кто-то теперь нажимает enter в вашей форме, (скрытая) следующая кнопка будет использоваться в качестве отправителя.
протестировано на IE9, Firefox, Chrome и Opera
Set
type=submitк кнопке, которую вы хотите использовать по умолчанию иtype=buttonк другим кнопкам. Теперь в форме ниже вы можете нажать Enter в любых полях ввода, и будет работать (несмотря на то, что это вторая кнопка в форме).пример:
<button id='close_button' class='btn btn-success' type=button> <span class='glyphicon glyphicon-edit'> </span> Edit program </button> <button id='render_button' class='btn btn-primary' type=submit> <!-- Here we use SUBMIT, not BUTTON --> <span class='glyphicon glyphicon-send'> </span> Render </button>протестировано в FF24 и Chrome 35.
Если вы используете jQuery, это решение из комментария здесь довольно гладко:
$(function(){ $('form').each(function () { var thisform = $(this); thisform.prepend(thisform.find('button.default').clone().css({ position: 'absolute', left: '-999px', top: '-999px', height: 0, width: 0 })); }); });просто добавить
class="default"к кнопке, которую вы хотите использовать по умолчанию. Он помещает скрытую копию этой кнопки прямо в начале формы.
Я воскрешаю это потому, что я исследовал на JavaScript способ сделать это. Я не был в ключевых обработчиках, и материал позиционирования CSS приводил к тому, что порядок табуляции нарушался, поскольку перемещение CSS не меняет порядок табуляции.
мое решение основано на ответе на https://stackoverflow.com/a/9491141.
источник решения находится ниже. tabindex используется для коррекции поведения вкладки скрытой кнопки, а также aria-hidden, чтобы избежать наличия кнопка считывается считывателями экрана / идентифицируется вспомогательными устройствами.
<form method="post" action=""> <button type="submit" name="useraction" value="2nd" class="default-button-handler" aria-hidden="true" tabindex="-1"></button> <div class="form-group"> <label for="test-input">Focus into this input: </label> <input type="text" id="test-input" class="form-control" name="test-input" placeholder="Focus in here and press enter / go" /> </div>1-я кнопка в DOM 2-я кнопка в DOM 3-я кнопка в DOM
основные CSS для этого решения:
.default-button-handler { width: 0; height: 0; padding: 0; border: 0; margin: 0; }
другое решение, используя jQuery:
$(document).ready(function() { $("input").keypress(function(e) { if (e.which == 13) { $('#submit').click(); return false; } return true; }); });Это должно работать на следующих формах, делая "обновить" действие по умолчанию:
<form name="f" method="post" action="/action"> <input type="text" name="text1" /> <input type="submit" name="button2" value="Delete" /> <input type="submit" name="button1" id="submit" value="Update" /> </form>а также:
<form name="f" method="post" action="/action"> <input type="text" name="text1" /> <button type="submit" name="button2">Delete</button> <button type="submit" name="button1" id="submit">Update</button> </form>это захватывает клавишу ввода только тогда, когда поле ввода в форме имеет фокус.
вы не должны использовать кнопки с одноименным названием. Это плохая семантика. Вместо этого вы должны изменить свой бэкэнд, чтобы искать разные значения имен:
<input type="submit" name="COMMAND_PREV" value="‹ Prev"> <input type="submit" name="COMMAND_SAVE" value="Save"> <input type="reset" name="NOTHING" value="Reset"> <input type="submit" name="COMMAND_NEXT" value="Next ›"> <input type="button" name="NOTHING" value="Skip ›" onclick="window.location = 'yada-yada.asp';">Так как я не знаю, какой язык вы используете на бэкэнде, я дам вам некоторый псевдокод:
if (input name COMMAND_PREV is set) { } else if (input name COMMAND_SAVE is set) { } else if (input name COMMENT_NEXT is set) { }
решение bobince имеет обратную сторону создания кнопки, которая может быть Tab-д, но в противном случае непригодности. Это может создать путаницу для пользователей клавиатуры.
другое решение-использовать малоизвестный :
<form> <input name="data" value="Form data here"> <input type="submit" name="do-secondary-action" form="form2" value="Do secondary action"> <input type="submit" name="submit" value="Submit"> </form> <form id="form2"></form>Это стандартный HTML, однако, к сожалению, не поддерживается в Internet Explorer.
Comments