使用VBA,如何在使用Knockout JS的网页上的<input />文本框中输入值?

时间:2017-04-12 21:28:45

标签: vba knockout.js

我正在尝试在使用Knockout JS的网页上填充表单。当我将值插入特定文本框时,它似乎已取值,但是当我提交表单时,它会保留它以前的值。通过一些挖掘,我发现Knockout JS使用数据绑定来更新底层值。当我在输入文本框中插入一个值时,Knockout JS没有被触发,因此不会更新基础值。 This post用于类似的东西,但带有复选框和下拉框而不是文本框。但我无法弄清楚如何使用文本框。

我正在尝试更新的实际网站需要登录,但我认为Knockout JS网站http://knockoutjs.com/examples/helloWorld.html上的此页面足以用于测试目的。

基本上我需要的是,使用VBA,在2个文本框中输入FirstName和LastName(当前它表示'Planet'和'Earth')。您应该看到2个输入值紧跟在“Hello Planet Earth”的下方。手动将其键入文本框可以正常工作。但我无法让它在VBA中运作。

这是'到目前为止我所拥有的......

Sub KnockoutTest()


Dim IE As New InternetExplorer
Dim hDoc As HTMLDocument

IE.Visible = True


'Load webpage and loop until loading is complete.
IE.Navigate "http://knockoutjs.com/examples/helloWorld.html"
Do While (IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE)
  DoEvents
Loop

Set hDoc = IE.Document

Set firstName = hDoc.getElementsByClassName("liveExample").Item(0).all.Item(1)
Set lastName = hDoc.getElementsByClassName("liveExample").Item(0).all.Item(3)

firstName.Click
firstName.Value = "Joe"
lastName.Click
lastName.Value = "Bloggs"

'Close ie object
Set IE = Nothing
Application.ScreenUpdating = True 

End Sub

任何人都对如何解决淘汰赛事有任何想法?

我正在尝试更新的页面上的文本框中的实际html是....

<input type="text" ondrop="return false;" onpaste="return false;" data-bind="numericValue: Markup, visible: IsCellEditable(), selected: IsCellEditable(), event: { blur: blurZoneMarkup, keypress: function (data, event) { return $parent.isDecimal(data, event, hdnIsDiscount) }, keydown: function (data, event) { $(event.target).data('tabcode', event.which || event.keyCode); { return true; } } }" style="width: 90%; display: none;">

非常感谢任何帮助或建议。我一直试图解决这个问题3天了!

1 个答案:

答案 0 :(得分:0)

基本上,您需要处理“ HTMLevents”之类的自动输入并触发它们。您原始代码的更新摘录:

                    With hDoc
                        Set evt = hDoc.createEvent("HTMLEvents")
                        evt.initEvent "change", True, False
                        firstName.Value = "Joe"
                        firstName.dispatchEvent evt
                    End With

测试了此代码,并在您提供的链接网站上正常工作。

我已经使用VBA完成了许多网站自动化工作,最可靠的方法是针对每个要填写的字段创建一个事件,为该字段分配一个值,并分派创建的事件。

有关更多信息,请参阅MSDN https://msdn.microsoft.com/en-us/ie/ff975247(v=vs.94)

上的文档。