Javascript 自动表单手动提交

Javascript 自动表单手动提交,javascript,android,forms,meteor,meteor-autoform,Javascript,Android,Forms,Meteor,Meteor Autoform,我正在为我的meteor应用程序使用Autoform,我想使用javascript手动提交表单。我试过: $('form#myFormId').submit(); 及 两个都不起作用。未提交表单,且未调用任何回调函数(例如onSuccess)。我之所以这样做是因为我想在我的android webview中注入javascript,我用它在我的android应用程序中显示我的网站 编辑:我认为表单正在提交,但是没有调用任何Autoform函数,也就是说,没有向集合中插入任何内容,回调不起作用。现

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

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

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


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

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

if (Meteor.isClient)
    AutoForm.debug()
在应用程序中的某个development.js文件中

现在,您的自动表单不触发附加的方法可能会发生以下情况:

  • 表单的id在页面上不是唯一的,autoform与另一个id挂钩,不会检测到表单提交。我有一种强烈的感觉,这里可能就是这样
  • 您的模式中有一些非可选的东西,只要没有填充所有必填字段,就无法提交表单
  • 您的events.js中的某个地方调用了click yourformbutton事件,防止在提交时触发实际的autoform事件侦听器(但情况不应该是这样,因为通过
    .submit()
    提交也不起作用)
另一个了解情况的好方法是使用自动表单挂钩,比如:
onSubmit:function(insertDoc,updateDoc,currentDoc)
onSuccess:function(result)
onError:function(error)
。在提交时检查数据流特别有趣


有关这些钩子的更多详细信息,请参见此处:

这可能不是最好的方法,但以下是我如何手动提交表单的方法

我有这样定义的自动表单

{{#autoForm schema=postFormSchema id="formId"}}
然后我定义了一个
onSubmit
hook to with
return false
,这样我就可以从我的客户端手动调用my

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方法进行自动表单提交,则不会调用onSubmit

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

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