Ручная отправка автоформы

Я использую Autoform для своего метеорного приложения и хочу отправить форму вручную с помощью javascript. Я пробовал:

$('form#myFormId').submit();

и

document.forms['myFormId'].submit();

и ни один из них не работает. Форма не отправляется, и ни одна из функций обратного вызова (например, onSuccess) не вызывается. Я хочу сделать это, потому что хочу внедрить javascript в свой веб-просмотр для Android, который я использую для отображения своего веб-сайта в своем приложении для Android.

РЕДАКТИРОВАТЬ: я думаю, что форма отправляется, но ни одна из функций Autoform не вызывается, т.е. ничего не вставляется в коллекцию, обратные вызовы не работают. Прямо сейчас он просто перенаправляет на ту же веб-страницу с входным содержимым в URL-адресе (поскольку я не указал действие для своей формы, поскольку оно мне не нужно, если я использую автоформу и метеор).


person sweetticket    schedule 04.09.2015    source источник


Ответы (2)


При работе с meteor-autoform рекомендуется всегда включать режим отладки во время разработки:

if (Meteor.isClient)
    AutoForm.debug()

в каком-то файле development.js где-то в вашем приложении.

Теперь, когда ваша автоформа не запускает прикрепленные методы, это может произойти в следующих случаях:

  • идентификатор вашей формы не уникален на вашей странице, а autoform привязан к этому другому идентификатору и не обнаруживает отправку формы. У меня есть сильное предчувствие, что это может иметь место здесь.
  • у вас есть некоторые необязательные вещи в вашей схеме, препятствующие отправке формы, пока все обязательные поля не заполнены.
  • у вас есть где-то в вашем events.js вызываемое событие click yourformbutton, предотвращающее срабатывание фактического прослушивателя событий автоформы при отправке (но этого не должно быть, поскольку отправка через .submit() тоже не работает.

Еще один хороший способ понять, что происходит, — использовать хуки автоформы, такие как: onSubmit: function(insertDoc, updateDoc, currentDoc), onSuccess: function(result), onError: function(error). При отправке особенно интересно изучить поток данных.

Подробнее об этих хуках здесь: https://github.com/aldeed/meteor-autoform#callbackshooks< /а>

person ko0stik    schedule 06.09.2015

Это может быть не лучший подход, но вот как я смог вручную отправить свою форму. Вдохновлен этим подходом.

У меня есть автоматическая форма, определенная так

{{#autoForm schema=postFormSchema id="formId"}}

Затем я определил хук onSubmit с return false, чтобы я мог вручную вызывать свой метеорный метод из мой клиент.

onSubmit: function(insertDoc, updateDoc, currentDoc) {
  //Do some custom async js here as required,
  //Then I call my meteor method directly from obSubmit hook
  Meteor.call("addPost", insertDoc, function (error, post) {});
  //reset the form.
  AutoForm.resetForm('formId');
  return false;
}

Примечание. onSubmit не вызывается, если у вас есть type=method и вы используете метод метеора для отправки автоформы. здесь

Преимущество этого заключается в том, что AutoForm обрабатывает проверку и пытается отправить, и я могу выполнить некоторые настройки в методе onSubmit. (Убедитесь, что вы также вызываете check в методах сервера, используя ваш AutoFormSchema).

person akotian    schedule 26.09.2015