Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция submit() содержит изъян!!! (https://javascript.ru/forum/misc/23487-funkciya-submit-soderzhit-izyan.html)

a1exei 25.11.2011 12:50

Функция submit() содержит изъян!!!
 
Заметил что при стандартном использовании формы без скриптов, если у сабмита указано имя, в запросе отправляется имя сабмита как переменной и значение value, т.е. как и любой другой элемент формы с именем.

Однако, при использовании функции submit() переменную с именем сабмита не отправляет. Хотелось бы узнать есть ли способ отправить форму и с этой переменной, естественно с помощью скрипта и не используя click(), требуется это в общем-то для обхода проверки onclick. :victory:

Kolyaj 25.11.2011 13:03

Здесь нет изъяна, так задумано. При нажатии на кнопку отправляется её имя/значение. В форме может быть несколько кнопок submit, тогда при нажатии одной из них отправляется имя/значение нажатой, на сервере можно понять, какую кнопку нажали.
А при вызове submit() никакая кнопка не нажимается.

Gvozd 25.11.2011 13:04

Цитата:

Сообщение от a1exei
Заметил что при стандартном использовании формы без скриптов, если у сабмита указано имя, в запросе отправляется имя сабмита как переменной и значение value, т.е. как и любой другой элемент формы с именем.

Да, ведь вы сабмитите форму через кнопку
Если на форме несколько кнопок сабмита, то отправятся данные соответствующие нажатой.

А вот, если вы засабмитите просто форму, нажав Enter в поле ввода, то никаких данных о кнопке сабмита послано не будет, потому что вы не нажали ни одну из них.

Так, что логично, что когда в JS вы вызываете submit() у формы, то и посылаются данные как-будто вы засабмитили только форму.
Для того чтобы засабмитить вместе с кнопкой, надо инициировать ее нажатие, либо сделать фейковое hidden-поле с данными нужной вам кнопки Submit

a1exei 25.11.2011 14:06

Это я уже понял.)
Дело в том что click() использовать нельзя.

Цитата:

фейковое hidden-поле с данными нужной вам кнопки Submit
Я тоже думал об этом. Получается других способов нет. Ну ладно, пока сделаю так, спасибо за ответ.

grego 09.01.2012 16:56

Ребята, привет! Задам вопрос здесь, дабы не плодить темы.

Вообщем - есть форма, есть поле ввода, есть кнопка-сабмит, хочу сделать сообщение валидации при незаполненном поле по нажатию на кнопку, а именно есть блок с рисунком, у которого по умолчанию в цсс задан параметр visibility: hidden, по нажатию на кнопку вызывается обработчик события формы onsmubmit="validate();"
В теле функции validate() содержится условие if (...forma.text.value="")
....style.visibility="visible";
Так вот проблема заключается в том, что при нажатии на кнопку сабмита блок показывается на долю секунды (полагаю, что на время срабатывания onclick) - это корректно?
З.Ы. Я думал, что блок при задании такого условия должен отображаться все время, пока я не напечатаю что-нибудь в поле.

vandy3 09.01.2012 17:38

Grego, скорее всего, у тебя происходит переход на другую страницу. Если у тебя ничего на прописано в атрибуте action тега form, тогда переход осуществляется на ту же страницу. То есть для тебя это выглядит, как появление предупреждения и исчезновение, а на самом деле страница просто перезагрузилась.

Если ты пишешь в теге формы onsubmit, то надо писать onsubmit = "return validate();". И если у тебя форма не прошла валидацию, то последней строчкой функции выдавать return false; тогда процесс будет останавливаться. То есть это как по клике на ссылку, чтобы браузер никуда не переходил, надо писать
<a href="#" onclick="myFunc(); return false;">Link</a>


Часовой пояс GMT +3, время: 17:55.