gpt4 book ai didi

没有输入字段的 HTML 日期选择器。使用 VBA 触发更新事件

转载 作者:搜寻专家 更新时间:2023-10-31 08:51:15 24 4
gpt4 key购买 nike

好的,

有困难解决方案的简单问题(当前)

有一个带有开始日期和结束日期选择器的页面。日期选择器没有 html 输入元素,但我可以使用 InnerText 访问它。使用 InnerText 将起始日期和起始日期放入

没有问题

问题是这样产生的:

When dates are manually entered, a "form" appears, that updates live as the user chooses the dates, and displays only the data within that date range. When this is done programatically there is no live updating of the "form"

到目前为止的尝试:

Set document = objIE.document

With document
.getElementsByClassName("controls").Item(0).Focus
.getElementsByClassName("select-daterange").Item(0).Focus
.getElementsByClassName("select-datepicker from").Item(0).Focus
.getElementsByClassName("date-label").Item(0).innerText = "June 1, 2017"
.getElementsByClassName("date-label").Item(1).innerText = "June 5, 2017"
End With

感谢社区的任何指导!

这是日期选择器的示例:

No-input Date Picker

最佳答案

我已经证明可以使用 fireevent 从 VBA 手动触发 Javascript 事件。

一些链接在这里

Mozilla Dev Network - EventTarget.fireEvent

这是我的代码。

Option Explicit

Sub Test()
'* Tools->References->Microsoft HTML Object Library
'* Tools->References->Microsoft Internet Controls

Dim ie As SHDocVw.InternetExplorerMedium
Set ie = New SHDocVw.InternetExplorerMedium


ie.Visible = True
ie.navigate "n:\TestWebOnChangeManually.html"

Dim obj As Object

Stop '* i use this pause to dismiss Allow Block Content footer warning message
Dim dom As MSHTML.HTMLDocument
Set dom = ie.document

Dim textSource As MSHTML.HTMLInputElement
Set textSource = dom.getElementById("source")

textSource.innerText = "poked"

'https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/fireEvent
'* not sure what to place in second parameter
textSource.FireEvent "onchange", Nothing


End Sub

并使用这个html测试文件

<html>
<head/>

<body>

<input id="source" type="text" onChange="MyChange('source')"></input>

<input id="someOtherControlToFocusSwitchTo" type="text" value="foo"></input>


<script>
function MyChange(eleId)
{
if (eleId)
{
var ele = document.getElementById(eleId);
if (ele) {
alert(ele.value);
}
} else
{
alert("MyChange fired with no param");
}

}

</script>
</body>
</html>

在其他地方似乎有一种不同的方法使用 dispatchEventSO FireEvent and IE11 复制的一些代码虽然我没有尝试这个。这是基于在 SO How can I trigger an onchange event manually? 找到的一些 javascript 的 VBA 代码它本身是 SO How to trigger event in JavaScript? 的副本

' Fire the onChange event...
Dim objEvent
Set objEvent = doc.createEvent("HTMLEvents")
objEvent.initEvent "change", False, True
e.dispatchEvent objEvent

我希望这对你来说足够了,调试这些东西可能很棘手。

关于没有输入字段的 HTML 日期选择器。使用 VBA 触发更新事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com