Я хотел бы иметь кнопку отправки, которая отправляет другое значение, чем отображено на кнопке. С <input type="submit">
можно казаться, не делаете это. С <button type="submit">
однако, они могут быть двумя различными значениями. Вопрос, он будет работать во всех браузерах?
Попытка этого тестового кода здесь:
<form method="get" action="">
<input type="text" name="txt"/>
<button type="submit" name="btn" value="val">text</button>
</form>
В FF 3.6 это обновляет мою строку поиска с обоими значениями соответственно (и отвечает мне нажимающий Enter в текстовом поле). В IE 8 это также принимает Enter нажатия, отображает текстовое значение в строке поиска, но это не показывает значение кнопки, как ПОЛУЧИТЬ параметрический усилитель вообще... делает это означает, что не отправляет его?
Я не могу использовать скрытые исходные данные, потому что я должен определить, какая кнопка нажата без JS.
Тест 2:
<form method="get" action="">
<input type="text" name="txt"/>
<button type="submit" name="submit1" value="submit1">submit</button>
<input type="submit" name="submit2" value="submit2"/>
<input type="submit" name="submit3" value="submit3"/>
</form>
В IE8 входит удар, не утверждает, что любая из кнопок, но нажимающий submit1 отправит значение. Это отправит, "отправляют", не "submit1", который несовместим И следующие. Однако представление формы только отправляет значение одной кнопки в обоих браузерах, что означает, что я смог проверять, который кнопка была нажата путем проверки если GET['submitX']
существует вместо этого! Chrome имеет немного отличающееся поведение при нажатии Enter (отправляет button2). Opera кажется согласовывающимся с FF..., но все 4 браузера только когда-либо отправляют одну кнопку. У меня нет более ранних версий браузеров установленными, хотя.... делает кто-либо знает, работает ли это в более ранних версиях, особенно IE6?
Вот альтернатива, если вы не уверены в использовании тега кнопки.
<form method="get" action="">
<input type="text" name="txt" />
<input type="hidden" name="myinput" value="myvalue" />
<input type="submit" name="submit" />
</form>
Это будет более согласованным, чем тег кнопки, поскольку некоторые браузеры фактически отправляют текст внутри тегов кнопки, а не его атрибута значения. Например
<button name="mybutton" type="submit" value="one">Two</button>
В некоторых браузерах будет отправлено «один», в других - «Два».
Если вы хотите действовать условно в зависимости от конкретной нажатой кнопки, вам придется сделать это на основе текста во вводе ...
В этом примере отображаемый текст («Кнопка 1» или «Кнопка 2 ") будет отправлен обратно.
Firefox: "? Txt = & submit = Button + 1" IE: "? Txt = & submit = Button + 1" Safari: "? Txt = & submit = Button + 1"
И так далее. Обычно считается возможным присвоение двум элементам формы одного и того же имени, поскольку это поддерживается браузерами. Однако это официально не задокументировано, поэтому вам придется решить, хотите ли вы действовать в соответствии с ним.
В качестве последней альтернативы, есть ли причина, по которой вы не можете предоставить им поле формы, которое позволяет им выбирать поток управления вместо двух кнопок?
<form method="get" action="">
<input type="text" name="txt" />
<select name="myname">
<option value="A">A</option>
<option value="B">B</option>
</select>
<input type="submit" name="submit" value="Go" />
</form>
ОБНОВЛЕНИЕ
Если вам нужны две кнопки для случая вы упоминаете в своем комментарии ... т.е.одна кнопка на полпути вниз по форме для обновления чего-либо на основе поднабора входных данных и другая кнопка внизу для отправки, вот как вы должны делать что-то ...
1) Обе кнопки должны делать то же самое вещь - просто отправьте форму.
2) Вы должны обнаружить серверную сторону, если у вас есть допустимая форма (если они работают последовательно и попали в первую из двух отправок, у вас будут пустые поля ввода для второй половины формы, что сделает ее недействительной) .
3) Вы должны обнаружить серверную сторону, если у вас достаточно информации для выполнения вычислений или обновления, о которых вы упоминаете в своем комментарии.
В случаях 2 и 3 вы должны отметить поля, которые необходимы пользователю для продолжения.
Это устраняет необходимость в определенных кнопках для выполнения определенных действий - пользователь может вводить первую половину формы и при этом нажимать кнопку внизу - так что вы не хотите основывать свою логику на том, какая кнопка была нажата. .
Не прикрепляйте значения к кнопкам типа submit. Кнопка с типом submit отправляет форму. Это все, что он делает и на что должен надеяться. Любой метод отправки любой формы равен всем другим методам отправки той же формы по назначению и объему данных. Чтобы быть логически правильным для целей HTML, вам необходимо использовать отдельные формы, если вы хотите, чтобы разные данные возвращались условно при отправке.
Я понимаю, что мой ответ неудобен, но это единственно правильный ответ без добавления и удаления скрытых полей ввода с помощью JavaScript.
Используйте скрытые поля, это лучший способ сделать это.
<input type="hidden" value="any value you want to enter" />