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

form.submit();
Вылетает с ошибкой - Object required
document.getElementById("FormID"

И в добавок 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 років тому
Хм, а вот странно, если не с помощью джейквери самбитится - то функция onSubmit формы не вызывается, хотя форма сабмитится нормально, как видно. Почему так, кто знает?)
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-файле, а в документе, вместо кода, написать вызов этого файла.