Мирон Яцкевич
5629 повідомлень
#13 років тому
Как программно нажать сабмит формы ?
Казалось бы задача - проще не бывает
Следующий код :
var form = document.getElementById("FormID"; - кстати здесь форум интерпретирует в рожицу
form.submit();

Вылетает с ошибкой - Object required

document.getElementById("FormID".submit(); не сработает также

И в добавок document.FormName.submit(); также вылетит с ошибкой

На такой вызов document.forms.submit(); ругается, что document.FormName null or not is object

Так как же программно нажать сабмит формы ?
Евгений Кашкаров
450 повідомлень
#13 років тому
Чтобы не было рожиц, есть теги code
В первом варианте у вас записано так?
var form = document.getElementById("FormID";);

Если да - уберите ; перед скобкой. Что говорит alert(form) ?
Мирон Яцкевич
5629 повідомлень
#13 років тому
Цитата ("Jekyll"):
Чтобы не было рожиц, есть теги code

Спасибо. Только он на кавычку так реагирует. У меня все правильно написано.

Проблема в том, что нажать сабмит формы находящейся в <body></body> из скрипта находящегося в <head></head>
не получается
Евгений Кашкаров
450 повідомлень
#13 років тому
Получается, что когда отрабатывает ваш скрипт, форма ещё не загружена. Попробуйте выполнять после полной загрузки страницы:
function f() {
var form = document.getElementById("FormID");
form.submit();
}

window.onload = f;
Мирон Яцкевич
5629 повідомлень
#13 років тому
Цитата ("Jekyll"):
Получается, что когда отрабатывает ваш скрипт, форма ещё не загружена.

Так и есть.
Но самое интересное, что когда все таки корректно выполняется эта ф-ция function f()
то в ф-ции onsubmit="MyFormSubmit()" я поставил alert()

Он не выполняется. И не известно вообще как выполняется эта ф-ция MyFormSubmit()
Данные естественно тоже не отсылаются!

В то время как alert() расположенный в f() корректно отрабатывает

И при чем не важно где расположена MyFormSubmit()

Результат всегда одинаковый
Евгений О.
2989 повідомлень
#13 років тому
Вообще-то без полного кода страницы вряд ли можно что-то определить.
А в целом, надо учитывать, что обработчик html-кода и javascript-кода не синхронизированы между собой и обрабатывают свой код сразу по мере разборки документа. Поэтому имеет значение где расположен javascript-код отностительно html-кода. В вашем случае скорее всего javascript обрабатывается раньше, чем обработан нужный кусок html. Этого можно избежать, если синхронизировать вызовы javascript через события html. Или можно расположить javascript-код после используемого html-кода.
Роман П.
1599 повідомлень
#13 років тому
Цитата ("mirekua"):
Как программно нажать сабмит формы ?
Казалось бы задача - проще не бывает


Именно. Все всегда работает отлично, у вас какая-то ошибка где-то. Надеюсь, вы не думаете всерьез, что это не у вас ошибка

приведите целиком код всей страницы, сразу будет понятно где чего не так.
Мирон Яцкевич
5629 повідомлень
#13 років тому
Цитата ("Crist"):
приведите целиком код всей страницы

elosoft, MyFormSubmit() Описана после описания формы.

Хотя я писал уже, что это не важно в принципе

Я думаю дело в другом.
Программный s.submit() не работает из-за какой то дыры в безопасности, которую залепили во всех браузерах.
Вот

Попробуйте у себя .submit()
Роман П.
1599 повідомлень
#13 років тому
mirekua, да пжалста

Роман П.
1599 повідомлень
#13 років тому
Хм, а вот странно, если не с помощью джейквери самбитится - то функция onSubmit формы не вызывается, хотя форма сабмитится нормально, как видно. Почему так, кто знает?)
Сергей Шпак
596 повідомлень
#13 років тому
Все решаемо. Читайте мат часть.
Мирон Яцкевич
5629 повідомлень
#13 років тому
Цитата ("Crist"):
да пжалста

Есть еще один момент.
А суждение. ру это сайт на джумла ?
Евгений О.
2989 повідомлень
#13 років тому
Цитата ("mirekua"):
elosoft, MyFormSubmit() Описана после описания формы.

Если сразу после описания формы, то бывает, что и не работает. Тут надо смотреть как все в целом завязывается. Как правило помогает вынести этот кусок javascript вообще запределы html и написать его после закрытия </html>.

Цитата ("mirekua"):
Программный s.submit() не работает из-за какой то дыры в безопасности, которую залепили во всех браузерах.

Нет там никаких специальных ограничений. Только общая политика безопасности работы с http протоколом.
Мирон Яцкевич
5629 повідомлень
#13 років тому
Цитата ("elosoft"):
Тут надо смотреть как все в целом завязывается. Как правило помогает вынести этот кусок javascript вообще запределы html и написать его после закрытия </html>.

Мдааа.........

До такого фиг допреш
Евгений О.
2989 повідомлень
#13 років тому
Цитата ("mirekua"):
До такого фиг допреш

А в чем проблемы-то?
<html>
<body>
...
<form>
<input type="button" onclick="javascript: f_send(this.form);" />
</form>
...
</body>
</html>
<script type="text/javascript">
function f_send(_form) {
_form.submit();
}
</script>

Вот и все. 100% гарантия, что все будет определено на момент клика. И такую конструкция куда хочешь загнать можно. Хоть в конец документа, хоть в тэг <head>. Везде работать будет.
Мирон Яцкевич
5629 повідомлень
#13 років тому
Цитата ("elosoft"):
А в чем проблемы-то?

Спасибо за подсказку конечно.

Но все же я нигде не натыкался где бы было написано, что описывать ф-цию
вызываемую при сабмите формы надо именно так.

Обычно просто не надо программно вызывать сабмит.
И в случае чего кнопку можно нарисовать свою по другому

Вот, что мне и не нравится. Ведь другие элементы будут работать без таких выкрутасов.
И в моем коде работает например обработка дивов и прочее.

При чем ф-ции обработки в хеаде, а то и инклуде
Евгений О.
2989 повідомлень
#13 років тому
Цитата ("mirekua"):
Но все же я нигде не натыкался где бы было написано, что описывать ф-цию
вызываемую при сабмите формы надо именно так.

Вызывать можно как угодно, лишь бы это соотвествовало правилам языка.

Вообще-то это вполне типовая ситуация, только проявляется не часто. Это проблема обработчиков javascript. Обычно на такое можно наткнуться при большом количестве разрозненных вызовов javascript, подгрузке сразу нескольких библиотек и т.п.
Народ уже придумал обход таких глюков.
Самый практичный вариант привязаться к событиям. События обрабатываются последними и в этот момент все наверняка определено.
Если события нельзя использовать, то есть 2 других варианта:
1. Перенести неработающий код в самый низ документа.
2. Записать нужный код в отдельном js-файле, а в документе, вместо кода, написать вызов этого файла.
Мирон Яцкевич
5629 повідомлень
#13 років тому
Цитата ("elosoft"):
Записать нужный код в отдельном js-файле, а в документе, вместо кода, написать вызов этого файла.

Обычно я так и делал. Действительно с инклуде у меня таких косяков не возникало ранее.