2015-09-04 47 views
3

我使用Autoform爲我的流星應用程序,我想使用JavaScript手動提交表單。我已經試過:Autoform手動提交

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

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

和他們都沒有工作。表單沒有被提交,也沒有任何回調函數(例如onSuccess)被調用。我想這樣做是因爲我想在我的android webview中注入javascript,我正在使用它在我的android應用程序中顯示我的網站。

編輯:我認爲表單正在提交,但沒有Autoform函數被調用,即。沒有任何東西被插入到集合中,回調不起作用。現在,它只是重定向到URL中輸入內容的同一網頁(因爲我沒有爲我的表單指定動作,因爲如果我使用autoform和流星,我不需要動作)。

回答

1

流星自動窗體處理,好事做的是始終啓用調試模式,同時在發展:

if (Meteor.isClient) 
    AutoForm.debug() 

在一些development.js文件在您的應用程序的某個地方。現在

,讓您的自動窗體沒有觸發連接時,可能發生的方法:

  • ID的形式是不是你的頁面,自動窗體獨特鉤住這個其他ID並且未檢測到您的表單提交。我有強烈的感覺,這可能是這種情況。
  • 您的模式中有一些非可選項,只要所有必填字段未填充,都會阻止提交表單。
  • 你有地方在你events.js一個點擊yourformbutton事件被調用,防止實際的自動窗體事件偵聽器火提交時(但這不應該是因爲通過.submit()提交也不行的情況。

另一種好方法,瞭解發生了什麼事情是使用自動窗體鉤子一樣:onSubmit: function(insertDoc, updateDoc, currentDoc)onSuccess: function(result)onError: function(error)在提交特別有趣的是檢查您的數據流

此處詳細瞭解這些鉤子細節:https://github.com/aldeed/meteor-autoform#callbackshooks

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和使用流星方法爲您自動窗體提交的onsubmit不叫。 mentioned here

這樣做的好處是AutoForm處理驗證,並嘗試提交,我可以在onSubmit方法中執行一些自定義。 (確保使用您的AutoFormSchema也可以在服務器方法上調用check)。