我在觸發與輸入框相關的事件時遇到問題。當我檢查相關文本框時,這些是“DOM Explorer”的“事件”視窗中的事件偵聽器。但是,它們并未在輸入框本身的 HTML 中列出。在列出的幾個事件偵聽器中(例如“輸入”、“模糊”、“粘貼”),它們都觸發相同的 JavaScript 函式“x”。雖然我的代碼確實插入了文本,但該欄位在按下提交按鈕時不會驗證并突出顯示紅色。手動輸入或剪切和粘貼將解決此問題。我試過 .fireEvent ;.dispatchEvent 甚至嘗試直接呼叫 javascript。它都不起作用。這是一個公共網站,地址在代碼中。我在代碼下方包含了填寫前 3 個欄位的代碼。
以下是該欄位的 HTML:
<input class="office-form-question-textbox office-form-textfield-input form-control office-form-theme-focus-border border-no-radius" aria-labelledby="QuestionId_r57b9be42eed24e63b4d2af31c178f530 QuestionInfo_r57b9be42eed24e63b4d2af31c178f530" spellcheck="true" maxlength="4000" placeholder="Enter your answer">
DOM 資源管理器視窗的螢屏截圖在這里:

Private Sub Test()
myAddress = "https://forms.office.com/Pages/ResponsePage.aspx?id=q4GdsF1ZzU2rJGpWVuGNiROj17Ac1mtIt6V80jIX_PFUMEs1VTZaQ0VRV1NNNVI4Vzg3V0RMOE83TS4u"
'create new instance of IE.
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate myAddress
'wait for loading
Do While IE.Busy = True Or IE.readyState <> 4: DoEvents: Loop
WasteTime (0.1) 'Custom function to pause for 0.1 sec
Dim myData(1 To 3, 1 To 3) As String
myData(1, 1) = "Member Surname"
myData(2, 1) = "QuestionId_r57b9be42eed24e63b4d2af31c178f530"
myData(3, 1) = "Chowdhary"
myData(1, 2) = "Member Forename"
myData(2, 2) = "QuestionId_rb88bf6d86f284dbaa14e5f3f27ee9f5b"
myData(3, 2) = "Saqib"
myData(1, 3) = "Member DOB"
myData(2, 3) = "QuestionId_r38d6e5656a6b4fbf86f586d10cbd8cb6"
myData(3, 3) = "19/04/1971"
Set objItem = IE.document.getElementsByTagName("input")
x = 0
Do While x < objItem.Length
Set ele = objItem(x)
mySearch = ele.outerHTML
For c = 1 To UBound(myData, 2)
If InStr(mySearch, myData(2, c)) > 0 Then
ele.Focus
ele.Value = myData(3, c)
Set event_onChange = IE.document.createEvent("HTMLEvents")
event_onChange.initEvent "paste", True, False
ele.dispatchEvent event_onChange 'This does not fire event
'ele.FireEvent ("onpaste") '- This did not work either
'IE.document.parentWindow.execScript code:="x(c)" ' Tried to directly call the javascript function
Exit For
End If
Next c
x = x 1
Loop
End sub
任何意見,將不勝感激
uj5u.com熱心網友回復:
可以使用SendKeys觸發搜索框中的事件。您可以使用設定輸入框的值來模擬用戶輸入SendKeys,然后單擊提交以提交表單。
您可以參考下面的代碼片段。我已經測驗過并且有效:
Set objItem = IE.document.getElementsByTagName("input")(0)
objItem.Focus
SendKeys ("Chowdhary")
Application.Wait (Now TimeValue("00:00:02"))
IE.document.getElementsByTagName("button")(4).Click
uj5u.com熱心網友回復:
所以我終于讓代碼基于相同的.initEvent方法.dispatchEvent作業。我只需要引入一個 0.1 秒的短暫暫停(使用自定義的“Wastetime”功能)來讓元素完全加載。為了感興趣,更改后的相關代碼片段是:
Set objItem = IE.Document.getElementsByTagName("input")
x = 0
Do While x < objItem.Length
Set ele = objItem(x)
mySearch = ele.outerHTML ' Could just enumerate the input indexes in order
For c = 1 To UBound(myInternalArray, 2)
If InStr(mySearch, myInternalArray(2, c)) > 0 Then
If myInternalArray(3, c) = "click" Then
ele.Click
WasteTime (0.1) 'Time for form to expand
Exit For
Else
ele.Value = myInternalArray(3, c)
ele.Focus
Set event_onInput = IE.Document.createEvent("HTMLEvents")
event_onInput.initEvent "input", True, False
ele.dispatchEvent event_onInput
Exit For
End If
End If
Next c
x = x 1
Loop
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/415843.html
標籤:
