Autoform手动提交

时间:2015-09-04 19:29:48

标签: javascript android forms meteor meteor-autoform

我正在为我的meteor应用程序使用Autoform,我想使用javascript手动提交表单。我试过了:

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

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

并且它们都不起作用。表单未提交,并且未调用任何回调函数(例如onSuccess)。我想这样做因为我想在我的android webview中注入javascript,我用它在我的Android应用程序中显示我的网站。

编辑:我认为正在提交表单,但没有调用Autoform函数,即。没有任何东西被插入到集合中,回调不起作用。现在,它只是重定向到与网址中的输入内容相同的网页(因为我没有为我的表单指定操作,因为如果我使用autoform和meteor,我不需要一个)。

2 个答案:

答案 0 :(得分:2)

在处理 meteor-autoform 时,一件好事是在开发过程中始终启用调试模式:

if (Meteor.isClient)
    AutoForm.debug()

在应用程序中某处的某个development.js文件中。

现在,在以下情况下,您的 autoform 不会触发附加的方法:

  • 表单的 id 在您的网页上不是唯一的, autoform 会挂钩到其他 id ,并且无法检测到你的表格提交。我有一种强烈的感觉,这可能就是这种情况。
  • 您的架构中有一些非可选的东西,只要没有填充所有必填字段,就会阻止提交表单。
  • 你的events.js中有一个点击你的forformbutton 事件被调用,阻止实际的autoform事件监听器在提交时触发(但是自从{{1}提交以来不应该这样做}也不起作用。

了解正在发生的事情的另一个好方法是使用自动形式挂钩,例如:.submit()onSubmit: function(insertDoc, updateDoc, currentDoc)onSuccess: function(result)。提交对于检查数据流特别有意义。

有关这些挂钩的更多详细信息:https://github.com/aldeed/meteor-autoform#callbackshooks

答案 1 :(得分:2)

这可能不是最好的方法,但这是我能够手动提交表单的方式。 Inspired by this方法。

我的自动表单定义如此

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

然后我使用onSubmit定义了一个return false挂钩,以便我可以从我的客户端手动调用meteor method

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;
}

注意:如果您有type=method且正在使用meteor方法进行AutoForm提交,则不会调用onSubmit。 mentioned here

这样做的好处是AutoForm处理验证,尝试提交,我可以在onSubmit方法中执行一些自定义。 (确保使用check)在服务器方法上调用AutoFormSchema