自动手动提交

Autoform manual submit

本文关键字:提交      更新时间:2023-09-26

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

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

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

都不能用。表单没有被提交,也没有回调函数(例如。onSuccess)正在被调用。我想这样做,因为我想在我的android webview中注入javascript,我用它在我的android应用程序中显示我的网站。

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

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

if (Meteor.isClient)
    AutoForm.debug()

在某个development.js文件中。

现在,让自动表单不触发附加的方法可能发生在:

  • 表单的id在您的页面上不是唯一的,并且autoform与其他id相关联,并且不检测您的表单提交。我有一种强烈的感觉,这里可能就是这种情况。
  • 你的模式中有一些非可选的东西,只要没有填充所有的必填字段,就会阻止表单被提交。
  • 你在你的events.js的某个地方有一个click yourformbutton事件被调用,防止实际的自动表单事件监听器在提交时被触发(但这不应该是这种情况,因为通过.submit()提交也不工作。

另一个理解发生了什么的好方法是使用自动生成钩子,如:onSubmit: function(insertDoc, updateDoc, currentDoc), onSuccess: function(result), onError: function(error)。在提交时检查您的数据流特别有趣。

关于这些钩子的更多细节在这里:https://github.com/aldeed/meteor-autoform#callbackshooks

这可能不是最好的方法,但下面是我如何手动提交表单的方法。受此启发。

我有一个自动表单定义如下

{{#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提交。这里提到的

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