2015-08-19 41 views
2

我試圖從使用MSHTML的Delphi應用程序中觸發HTML表單的onsubmit事件。我試圖使用IHTMLFormElement::submitIHTMLDocument4::FireEvent方法,但沒有一個人解僱了表單的onsubmit事件。如何觸發HTML表單的onsubmit事件?

這是我第一次嘗試:

var 
    Document: IHTMLDocument4; 
    FormElement: IHTMLFormElement; 
begin 
    Document := (WebBrowser.Document as IHTMLDocument4); 
    FormElement := (Document as IHTMLDocument2).Forms.item('form', 0) as IHTMLFormElement; 
    FormElement.submit; 
end; 

,這裏是我的第二次嘗試:

var 
    Document: IHTMLDocument4; 
    FormElement: IHTMLFormElement; 
begin 
    Document := (WebBrowser.Document as IHTMLDocument4); 
    FormElement := (Document as IHTMLDocument2).Forms.item('form', 0) as IHTMLFormElement; 
    Document.FireEvent('onSubmit', 'null'); 
    Document.FireEvent('onSubmit', FormElement.onsubmit); 
end; 

我在做什麼錯?我該如何解決HTML表單的onsubmit事件?

回答

4

你的第一次嘗試失敗,因爲IHTMLFormElement::submit方法不火的onsubmit事件,此方法的引用說以下內容:

的IHTMLFormElement ::提交方法不調用 HTMLFormElementEvents :: onsubmit事件處理程序。

你的下一個嘗試失敗,因爲你試圖激發文檔元素上的事件(想象,這個元素將不得不做,如果有具有附此事件不止一個子元素的決定)。除了你傳遞錯誤的參數。嘗試是這樣的(不要忘了適當的錯誤處理添加到您的生產代碼):

procedure TForm1.ButtonClick(Sender: TObject); 
var 
    Empty: OleVariant; 
    EventObj: OleVariant; 
    Document: IHTMLDocument2; 
    FormElement: IHTMLElement3; 
begin 
    // get the document interface reference 
    Document := (WebBrowser.Document as IHTMLDocument2); 
    // generate an event object to pass event context information 
    EventObj := (Document as IHTMLDocument4).CreateEventObject(Empty); 
    // get the form element and fire the event 
    FormElement := Document.forms.item('form', NULL) as IHTMLElement3; 
    FormElement.FireEvent('onsubmit', EventObj); 
end; 

下面是一個例子HTML一起玩:

<!DOCTYPE html> 
<html> 
    <body> 
     <form name="form" onsubmit="submitForm()"> 
     <input type="submit"> 
     </form> 
     <script> 
     function submitForm() { 
      alert("The form was submitted!"); 
     } 
     </script> 
    </body> 
</html> 
+0

工作完美,謝謝! –

+0

不客氣! – TLama

0

鑄成IHTMLElement和呼叫點擊方法。

var 
    Document: IHTMLDocument4; 
    FormElement: IHTMLFormElement; 
begin 
    Document := (WebBrowser.Document as IHTMLDocument4); 
    FormElement := (Document as IHTMLDocument2).Forms.item('form', 0) as IHTMLElement; 
    FormElement.Click; 
end; 
+0

點擊?你爲什麼要點擊表格?這並沒有什麼意義。 – TLama

+0

這就是你會做,如果你手動而不是編程手動。 – coderboy

+0

不,你會'提交'它,而不是'點擊'。 – TLama