
困难解决方案的一个简单问题(目前)
有一个带有来往日期选择器的页面.日期选择器没有HTML输入元素,但我可以使用InnerText访问它.
使用InnerText将to和from日期放入是没有问题的
问题出现了:
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.documentWith 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 感谢社区的任何指导!
以下是日期选择器的示例:
解决方法 我已经证明可以使用fireevent从VBA手动触发JavaScript事件.这里有一些链接
Mozilla Dev Network – EventTarget.fireEvent
这是我的代码.
Option ExplicitSub 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",nothingEnd 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> 在其他地方似乎有一种不同的方法使用dispatchEvent从SO 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 objEventSet objEvent = doc.createEvent("HTMLEvents")objEvent.initEvent "change",False,Truee.dispatchEvent objEvent 我希望这对你来说已经足够了,调试这些东西可能会很棘手.
总结以上是内存溢出为你收集整理的没有输入字段的HTML日期选择器.使用VBA来触发更新事件全部内容,希望文章能够帮你解决没有输入字段的HTML日期选择器.使用VBA来触发更新事件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)