Установить атрибут действия формы при отправке?

#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. Хотя этот код может отвечать на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, повышает его долгосрочную ценность.