可以拦截onchange事件吗?

时间:2012-10-13 23:18:12

标签: vba

在VBA中是否可以拦截javascript onchange事件并在webbrowser控件中获取原始ID#?

<select name="status0" id="status0" onchange="javascriptonchangeeventhere">

上面的代码是一个组合框演示,如果我要从组合框中选择一个项目,它将在javascript中处理onchange。它的作用是拉出一个包含当前日期和参考号的表单,而不是我想拉出自己的用户表单,然后将该数据吐出到相关的(notes0)字段中。如何在发生时拦截它,以便将其分配到正确的字段。

1 个答案:

答案 0 :(得分:2)

这是一个简短的例子。项目引用设置为“Microsoft HTML对象库”和“Microsoft Internet控件”

在类模块“clsEvents”中:

Option Explicit

Public WithEvents slct As MSHTML.HTMLSelectElement
Public WithEvents href As MSHTML.HTMLAnchorElement

'Note that having defined "href" as "WithEvents", if you choose "href"
'  from the left-hand dropdown at the top of the class code module
'  then the right-hand dropdown will populate with events you can select
'  from to create an event-handling procedure in the class

Private Function href_onclick() As Boolean
    Debug.Print "link clicked"
    href_onclick = False 'cancels the navigation
End Function

Private Sub slct_onchange()
    Debug.Print "select onchange - value is " & slct.Value
End Sub

Private Function slct_onclick() As Boolean
    Debug.Print "select onclick - value is " & slct.Value
End Function

在常规模块中:

Option Explicit

Dim evt As clsEvents

Sub Setup()

    Dim IE As New InternetExplorer
    Dim el As Object, el2 As Object

    Set evt = New clsEvents

    IE.Visible = True
    IE.navigate "http://www.csee.wvu.edu/~riggs/html/select_example.html"

    Do While IE.Busy
    Loop

    Set el = IE.document.getElementsByTagName("select")(1)
    Set el2 = IE.document.getElementsByTagName("a")(1)

    If Not el Is Nothing Then
        Debug.Print "setting event capture: currentvalue=" & el.Value
        Set evt.slct = el
    End If

    If Not el2 Is Nothing Then
        Debug.Print "setting event capture on link:" & el2.innerText
        Set evt.href = el2
    End If

End Sub

如果您运行Setup sub然后更改第二个选择的值或单击IE页面上的“Javascript”链接,您应该在VB编辑器的立即窗口中看到输出。

希望有助于您入门。