【发布时间】:2011-06-06 19:59:02
【问题描述】:
我正在尝试以编程方式调用 onsubmit 而不单击表单按钮。
首先我尝试简单地调用 IHTMLFormElement 接口的提交函数,但是表单没有正确处理输入数据:
CComPtr<IHTMLFormElement> ppvForm;
ppvForm->submit();
我在文档中看到它说提交函数不调用 onsubmit 事件,然后我尝试使用 IHTMLFormElement 接口的 get_onsubmit 提供的 IDispatch 调用方法调用 onsubmit 事件:
CComPtr<IHTMLFormElement> ppvForm;
...
_variant_t vResult;
_variant_t tvar;
hResult = ppvForm->get_onsubmit(&tvar); // <<< i get a NULL VARIANT here
DISPPARAMS params = {0};
hResult = tvar.pdispVal->Invoke(
DISPID_VALUE,
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,
¶ms,
&vResult,
NULL,
NULL);
if( SUCCEEDED(hResult) )
...
但是 ppvForm->get_onsubmit 调用返回带有 NULL 变体的 S_OK...(不知道为什么?!)
最后从 IHTMLDocument4 接口尝试了 fireEvent:
HRESULT hrRes=S_FALSE;
CComPtr<IHTMLDocument4> piDoc;
...
VARIANT_BOOL varRet;
CComPtr<IHTMLEventObj>pEvent;
hrRes=piDoc->createEventObject(NULL, &pEvent);
_variant_t vtEvent(pEvent);
hrRes=piDoc->fireEvent(_bstr_t(_T("onsubmit")), &vtEvent, &varRet);
fireEvent 现在总是返回 E_INVALIDARG!不知道为什么?不知道我是否需要在 vtEvent 中放一些东西或“onsubmit”字符串无效,不知道。
谁能指出我正确的方向或告诉我我做错了什么?
【问题讨论】: