2017-07-27 21 views
4

好吧,没有输入字段的HTML日期选择器。使用VBA火更新事件

一个简单的问题与困难的解决方案(目前)

有一个页面一个往返日期选择器。日期选取器没有html输入元素,但我可以使用InnerText访问它。 有使用的innerText把往返日期,

问题没有问题产生这样:

当日期是手动进入,一个“形式”出现,则表明更新live用户选择日期,并仅显示该日期范围内的数据。当这样做编程有“形式”

尝试没有任何活动更新至今:

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

+0

IE11。我应该尝试Firefox吗? – user1

+0

如果你不能共享URL,那么在页面上使用了什么'date-picker'?你能在这里更具体吗? – dee

+0

http://alloyui.com/examples/datepicker/像这样。没有输入框,只选择日期 – user1

回答

1

我已经证明了它是可以手动火从VBA使用fireevent 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> 
<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 objEvent 
Set objEvent = doc.createEvent("HTMLEvents") 
objEvent.initEvent "change", False, True 
e.dispatchEvent objEvent 

重复我希望这是够你调试这个东西可能会非常棘手。

+0

VBA是为Excel的VBScript是为浏览器看起来你创建了一个不是我如何解释问题的回应,但我确实认为这是解释它的唯一有效方法。 – William

+0

@威廉,是我编辑的标签。 –

+0

HTML/Js中没有onchange元素/事件 – user1

相关问题