То, что вы просите, не может быть сделано.Когда форма отправляется, она по существу перенаправляет (используя get или post) на определенный URL действия.Если вы отмените перенаправление, то форма не будет отправлена, поскольку перенаправление - это то, что отправляет / запрашивает данные с сервера.
Есть два способа решения этой проблемы.
- Отмените отправку формы и вместо этого отправьте запрос ajax.После получения ответа вы можете перенаправить.
var form = document.querySelector("#myForm");
var redirectElement = document.querySelector("#selectRedirect");
form.addEventListener("submit", onSubmit);
function onSubmit(event) {
$.ajax({
url: form.action,
context: JSON.stringify(new FormData(document.querySelector('form'))),
method: form.method.toUpperCase()
}).done(redirect);
event.preventDefault();
return false;
}
function redirect() {
window.location.href = redirectElement.value;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="selectRedirect">
<option selected disabled>Select URL</option>
<option value="url_1">URL 1</option>
<option value="url_2">URL 2</option>
<option value="url_3">URL 3</option>
</select>
<form id="myForm" action="action_url" method="action_get_or_post">
<input type="text" name="somedata" />
<input type="submit" value="Submit" />
</form>
Сохраните URL-адрес в параметрах localStorage, cookie или url, а затем перенаправьте после перенаправления.Чтобы сделать это с помощью URL-параметров, просто добавьте имя, например
redirectTo
, к элементу select, а затем используйте этот скрипт.
if (document.readyState === "complete") onLoad();
else addEventListener("DOMContentLoaded", onLoad);
function onLoad() {
var redirectTo = getUrlParameter("redirectTo");
if (redirectTo) window.location.href = redirectTo;
}
function getUrlParameter(parameterName) {
return (new RegExp(parameterName + "=([^&]+)", "i").exec(document.URL) || [])[1];
}