Подтвердить что ты не робот

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(), потому что для меня это кажется менее интуитивным. Спасибо заранее.

4b9b3361

Ответ 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>
}