Javascript Submit не включает значение кнопки Submit
Хорошо, это вопрос не такой, как для моей информации (потому что я могу думать о 4 разных работах, которые заставят его работать. Но у меня есть форма (ничего особенного), но кнопка отправки связанное с ним определенное значение.
<input type='submit' name='submitDocUpdate' value='Save'/>
И когда форма отправляется, я проверяю это имя.
if(isset($_POST['submitDocUpdate'])){ //do stuff
Однако есть один раз, когда я пытаюсь отправить форму через Javascript, а не кнопку отправки.
document.getElementById("myForm").submit();
Работает нормально, кроме 1 проблемы. Когда я смотрю на значения $_POST, которые передаются с помощью javascript-метода, он не включает submitDocUpdate. Я получаю все остальные значения формы, но не значение кнопки отправки.
Как я уже сказал, я могу придумать несколько способов обойти это (используя скрытую переменную, проверить isset на другой переменной формы и т.д.), но мне просто интересно, правильно ли это поведение submit(), потому что для меня это кажется менее интуитивным. Спасибо заранее.
Ответы
Ответ 1
Да, это правильное поведение HTMLFormElement.submit()
Причина, по которой ваше значение кнопки отправки не отправляется, заключается в том, что формы HTML сконструированы так, что они отправляют значение кнопки отправки, которая была нажата (или активирована иным образом). Это позволяет использовать несколько кнопок отправки для каждой формы, например сценарий, в котором вы хотите выполнить как "Предварительный просмотр", так и "Сохранить".
Поскольку вы программно представляете форму, на отдельной кнопке отправки нет явного действия пользователя, поэтому ничего не отправляется.
Ответ 2
Использование версии jQuery 1.0 или выше:
$('input[type="submit"]').click();
Я действительно работал над той же проблемой, когда наткнулся на этот пост. click() без каких-либо аргументов вызывает событие щелчка по всем выбранным элементам: http://api.jquery.com/click/
Ответ 3
Почему бы не использовать вместо этого следующее:
<input type="hidden" name="submitDocUpdate" value="Save" />
Ответ 4
Значение кнопки отправки отправляется, когда пользователь нажимает кнопку. Вызов формы .submit() не нажимает кнопку. У вас может быть несколько кнопок отправки, а функция form.submit() не имеет способа узнать, какой из них вы хотите отправить на сервер.
Ответ 5
Несмотря на то, что принятый ответ является технически правильным. Существует способ переноса значения, которое вы хотите присвоить. Фактически, когда отправление отправлено на сервер, значение кнопки отправки связано с именем, которое вы дали кнопке отправки. Это то, как работает Marcin, и есть несколько способов добиться успеха в зависимости от того, что вы используете. Ex. в jQuery вы можете пройти
data: {
submitDocUpdate = "MyValue"
}
в MVC я бы использовал:
@using (Html.BeginForm("ExternalLogin", "Account", new { submitDocUpdate = "MyValue" }))
Это на самом деле то, как я выполнил требования к паре с использованием собственного изображения в качестве ссылки для входа с использованием oAuth:
@using (Html.BeginForm("ExternalLogin", "Account", new { provider = "Steam" }, FormMethod.Post, new { id = "steamLogin" }))
{
<a id="loginLink" class="steam-login-button" href="javascript:document.getElementById('steamLogin').submit()"><img alt="Sign in through Steam" src="https://steamcommunity-a.akamaihd.net/public/images/signinthroughsteam/sits_01.png"/></a>
}