#html #forms #submit #action
#HTML #формы #Отправить #Экшен
Вопрос:
Как мне изменить атрибут действия формы сразу после нажатия кнопки отправки?
Ответ №1:
<input type='submit' value='Submit' onclick='this.form.action="somethingelse";' />
Или вы можете изменить его извне формы, обычным способом с помощью javascript:
document.getElementById('form_id').action = 'somethingelse';
Комментарии:
1. Это хороший краткий пример. Однако имейте в виду, что если у вас есть проверка, которая выполняется при отправке формы, и если эта проверка завершается неудачей после нажатия этой кнопки, то нажатие другой кнопки отправки все равно может вызвать новое установленное действие.
2. есть ли способ, которым я мог бы установить действие формы равным выбору опции внутри формы?
Ответ №2:
Есть простой способ сделать это, если вам нужна только поддержка современных браузеров: на вашей кнопке отправки добавьте formaction="/alternate/submit/url"
атрибут следующим образом:
<form>
[fields]
<input type="submit" value="Submit to a" formaction="/submit/a">
<input type="submit" value="submit to b" formaction="/submit/b">
</form>
Это также работает с <button>
тегами.
Проблема в том, что старые версии IE (<10) и браузера Android (<4.0) не поддерживают это. Итак, если вам нужно поддерживать старые браузеры, то существующие ответы JS, вероятно, будут работать лучше для вас.
Дополнительная информация:http://www.wufoo.com/html5/attributes/13-formaction.html
Комментарии:
1. Спасибо, сработало отлично, и поддержка достаточно широкая.
Ответ №3:
Вы также можете установить onSubmit
значение атрибута в теге формы. Вы можете установить его значение с помощью Javascript.
Что-то вроде этого:
<form id="whatever" name="whatever" onSubmit="return xyz();">
Here is your entire form
<input type="submit">
</form>;
<script type=text/javascript>
function xyz() {
document.getElementById('whatever').action = 'whatever you want'
}
</script>
Помните, что он onSubmit
имеет более высокий приоритет, чем атрибут действия. Таким образом, всякий раз, когда вы указываете onSubmit
значение, эта операция будет выполнена первой, а затем форма перейдет к действию.
Комментарии:
1. Браво за использование более подходящего события отправки вместо щелчка.
2. Это должно быть лучшим ответом. Обычно я отправляю формы нажатием
<enter>
, а не щелчком в любом месте.3. зачем использовать
onSubmit="return xyz();"
вот так. разве мы не можем просто иметьonSubmit="xyz()"
?4. Я полностью за более высокий приоритет! Только это спасло мой as … кхм, скин!
Ответ №4:
Прикрепите к click
событию кнопки отправки и измените action
атрибут в обработчике событий.
Комментарии:
1. @dave — можете ли вы также объяснить, почему вы не можете присвоить
action
атрибуту требуемое значение перед отправкой?2. это то, что я пытаюсь выяснить tbh.
3. @dave — Я имею в виду при рендеринге HTML. И, не видя вашего кода, я не думаю, что какая-либо дополнительная помощь возможна.
Ответ №5:
Вы можете сделать это на стороне javascript.
<input type="submit" value="Send It!" onClick="return ActionDeterminator();">
При нажатии JavaScript-функция ActionDeterminator() определяет альтернативный URL-адрес действия. Пример кода.
function ActionDeterminator() {
if(document.myform.reason[0].checked == true) {
document.myform.action = 'http://google.com';
}
if(document.myform.reason[1].checked == true) {
document.myform.action = 'http://microsoft.com';
document.myform.method = 'get';
}
if(document.myform.reason[2].checked == true) {
document.myform.action = 'http://yahoo.com';
}
return true;
}
Ответ №6:
Formaction HTML5 не работает в старых браузерах IE. Простое исправление, основанное на некоторых ответах выше, заключается в:
<button onclick="this.form.action='/PropertiesList';"
Account Details </button>
Ответ №7:
Вы можете попробовать это:
<form action="/home">
<input type="submit" value="cancel">
<input type="submit" value="login" formaction="/login">
<input type="submit" value="signup" formaction="/signup">
</form>
Комментарии:
1. Хотя этот код может отвечать на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, повышает его долгосрочную ценность.