<тип кнопки = “отправляют”> совместимость?

Я хотел бы иметь кнопку отправки, которая отправляет другое значение, чем отображено на кнопке. С <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?

24
задан mpen 6 May 2015 в 15:34
поделиться

3 ответа

Вот альтернатива, если вы не уверены в использовании тега кнопки.

<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 вы должны отметить поля, которые необходимы пользователю для продолжения.

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

10
ответ дан 29 November 2019 в 00:08
поделиться

Не прикрепляйте значения к кнопкам типа submit. Кнопка с типом submit отправляет форму. Это все, что он делает и на что должен надеяться. Любой метод отправки любой формы равен всем другим методам отправки той же формы по назначению и объему данных. Чтобы быть логически правильным для целей HTML, вам необходимо использовать отдельные формы, если вы хотите, чтобы разные данные возвращались условно при отправке.

Я понимаю, что мой ответ неудобен, но это единственно правильный ответ без добавления и удаления скрытых полей ввода с помощью JavaScript.

-2
ответ дан 29 November 2019 в 00:08
поделиться

Используйте скрытые поля, это лучший способ сделать это.

<input type="hidden" value="any value you want to enter" />
1
ответ дан 29 November 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: