我正在为我的meteor应用程序使用Autoform,我想使用javascript手动提交表单。我试过了:
$('form#myFormId').submit();
和
document.forms['myFormId'].submit();
并且它们都不起作用。表单未提交,并且未调用任何回调函数(例如onSuccess)。我想这样做因为我想在我的android webview中注入javascript,我用它在我的Android应用程序中显示我的网站。
编辑:我认为正在提交表单,但没有调用Autoform函数,即。没有任何东西被插入到集合中,回调不起作用。现在,它只是重定向到与网址中的输入内容相同的网页(因为我没有为我的表单指定操作,因为如果我使用autoform和meteor,我不需要一个)。答案 0 :(得分:2)
在处理 meteor-autoform 时,一件好事是在开发过程中始终启用调试模式:
if (Meteor.isClient)
AutoForm.debug()
在应用程序中某处的某个development.js文件中。
现在,在以下情况下,您的 autoform 不会触发附加的方法:
了解正在发生的事情的另一个好方法是使用自动形式挂钩,例如:.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
。