【发布时间】:2018-08-30 04:37:47
【问题描述】:
如何填充使用 javascript 的文本框以使用 Excel VBA 建议可用条目?手动填写文本框,我会开始输入几个字母,我可以选择的可用输入列表将出现在文本框下方。我需要用鼠标单击或使用箭头键在 javascript 下拉框中导航到我想要的条目,然后单击 Enter。
这是与其他常规输入框的主要区别。如果我只是在输入框中输入文本并继续下一个输入框而不从下拉框中选择条目,则输入不会注册。所以我不能简单地找到输入框的元素并改变它的值。我相信我需要执行激活下拉框的 javascript,然后我必须从中选择。
输入文本框的 HTML 代码是:
<td id="input2" class="createInputField" colspan="0" valign="middle"
<input value="" id="" name="docTypeDisplay" title="Document Type" size="18" type="text">
<input value="" name="docType" type="hidden">
<input value="" name="docTypeID" type="hidden">
上面代码的第一个输入标记行上有 5 个事件侦听器 - 来自 javascript 的 blur、dblclick、focus、keydown 和 keypress。我尝试查找 javascript,但它不容易理解并且是 H-U-G-E!所以考虑到这个限制,这就是我尝试过的:
IE.Document.getElementById("input2").getElementsByTagName("input")(0).Value = "Monthly Report"
Set objEvent = IE.Document.createEvent("HTMLEvents")
objEvent.initEvent "change", False, True
IE.Document.getElementById("input2").getElementsByTagName("input")(0).dispatchEvent objEvent
通过将 objEvent.initEvent 中的第一个参数更改为“blur”、“dblclick”、“focus”、“keydown”和“keypress”。我没有收到任何错误,并且输入没有注册。
那我试过了:
IE.Document.getElementById("input2").getElementsByTagName("input")(0).Value = "Monthly Report"
IE.Document.getElementById("input2").getElementsByTagName("input")(0).FireEvent ("onchange")
也试过了:
IE.Document.getElementById("input2").getElementsByTagName("input")(0).Focus
IE.Document.getElementById("input2").getElementsByTagName("input")(0).Value = "Monthly Report"
IE.Document.getElementById("input2").getElementsByTagName("input")(0).Blur
没有任何效果。
有人可以帮忙吗?我想我已经筋疲力尽了谷歌寻找解决方案。
【问题讨论】:
-
我猜没有网址可以分享?您是否尝试过组合事件?有时你需要一个特定的顺序来模仿你的键盘动作。我有时会发现 SendKeys down 和 tab 可能是有用的技巧。
-
@QHarr,你是对的,抱歉没有可分享的 URL。我尝试以不同的顺序和组合调用 javascript 事件,但没有任何效果。这是大海捞针,因为我什至不确定每个事件应该做什么。我会说我已经能够激活表单中的下拉输入框: Set objEvent = IE.Document.createEvent("HTMLEvents") objEvent.initEvent "change", False, True IE.Document.getElementById("DropdownInput" ).dispatchEvent objEvent
标签: javascript vba excel internet-explorer-11