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

私はそれを手動で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> 

他の場所で、私はこれを試してみませんでしたがSO FireEvent and IE11からコピーdispatchEventいくつかのコードを使用して別のアプローチがあるように思われます。これは、私はこのようなものは、トリッキーなことができ、デバッグ、あなたのために十分であると思います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 

の複製である自身SO How can I trigger an onchange event manually?で発見いくつかのJavaScriptをもとにVBAコードです。

+0

VBAはExcel用ですVBScriptはfor私は質問を解釈する方法ではない応答を作成したように見えますが、それを解釈する唯一の正しい方法だと思います。 – William

+0

@ウィリアム、ええ、私はタグを編集しました。 –

+0

HTML/JS内にonchange要素/イベントがありません – user1

関連する問題