- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Excel VBA 来自动化网页。 “选择”框和“输入”框是由名为“Select2”的 jQuery 平台创建的。
当用户单击“选择框”(显示为输入框)时,会弹出一个下拉框,要求用户输入两个字符。我发现您可以通过插入选择框 ID 使用此命令将有效数据项添加到此框中。
myDoc.parentWindow.execScript "$('#s2id_broomCloset').val('Swiffer - Model 2010').trigger('change')"
大多数输入框与其他输入框一样,您可以使用
更改它们myDoc.GetElementByID("broomCloset").value = "Swiffer"
但是,有一个使用 Select2 构建的输入框,其中涉及一个验证下拉列表,要求用户键入前两个字符,并列出姓氏以这两个字符开头的员工。然后用户应该从列表中选择员工。
此输入框与“
我能够使用
的建议我已尝试了所有我能想到的方法来在此输入框中输入有效的响应。以下是一些失败的尝试:
myDoc.GetElementByID("s2id_beanCounter").Children(0).Clicik
myDoc.parentWindow.execScript "$('#s2id_beanCounter').trigger('onclick')"
如果您能引导我找到答案,例如如何将有效的输入放入此框中,或者至少如何单击该框以显示下拉列表,这将是一个巨大的帮助。
2017 年 6 月 20 日编辑
根据@dee的建议,我能够将姓氏放入可搜索的输入元素中,并且它会下拉所有具有该姓氏的人。正如您从下面的 html 代码中看到的,下拉框中的名字被突出显示。
当我将鼠标悬停在任何名称上时,鼠标下方的名称将变为突出显示的名称。当然,单击鼠标左键即可将该名称输入到输入框中。
如何自动突出显示 UL 列表中我们需要的名称并单击它以将其作为有效值放入输入框中?
有关此搜索的一个警告是它仅搜索姓氏。
<div class="select2-drop select2-display-none bigdrop select2-with-searchbox select2-drop-active" id="select2-drop" style="left: 1049.13px; top: 227.83px; width: 238px; display: block;">
<div class="select2-search">
<input class="select2-input" spellcheck="false" type="text" autocomplete="off" autocapitalize="off" autocorrect="off">
</div>
<ul class="select2-results">
<li class="select2-results-dept-0 select2-result select2-result-selectable select2-highlighted">
<div class="select2-result-label">
<div>JOSEPH MENGELA (ARGENTINA)</div></div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable">
<div class="select2-result-label">
<div>TOMMY MENGELA (ITALY)</div>
</div>
</li>
<li class="select2-results-dept-0 select2-result select2-result-selectable">
<div class="select2-result-label">
<div>SUSAN H MENGELA (POLAND)</div>
</div>
</li>
</ul>
</div>
这是我用来获取下拉框以显示我们系统中具有该姓氏的所有人员姓名的代码。
Set myElement = myDoc.getElementById("s2id_IDofInputBoxHere").Children(0)
SendMouseDownEvent myDoc, myElement
Set myElement = myDoc.getElementById("select2-drop").Children(0).Children(0)
myDoc.getElementById("select2-drop").Children(0).Children(0).Value = "mengela"
' Send input event to trigger searching of text 'BR"
Dim kev
Set kev = myDoc.createEvent("KeyboardEvent")
kev.initEvent "input", True, False
myElement.dispatchEvent kev
最佳答案
For Version 4.0.3 of select 2
解决方案 1
在select2.js
中有函数:
this.$selection.on('mousedown', function (evt) {
// Only respond to left clicks
if (evt.which !== 1) {
return;
}
self.trigger('toggle', {
originalEvent: evt
});
});
此函数处理 selection
的 mousedown
事件,因此首先我尝试将 mousedown
发送到 selection
> 因此,我们打开选择
,然后将文本放入搜索框中。最后需要发送输入事件来触发搜索。
Sub Select2Demo()
Dim ie As SHDocVw.InternetExplorer
Dim doc As MSHTML.HTMLDocument
Dim url As String
url = "file:///C:/Temp/StackOverflow/html/Select2VbaDemo.html"
Set ie = New SHDocVw.InternetExplorer
ie.Visible = True
ie.navigate url
While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE
DoEvents
Wend
Set doc = ie.document
' Open drop down
Dim sp As HTMLSpanElement
Set sp = doc.querySelector("span[class^=select2-selection]")
SendMouseDownEvent doc, sp
' Put value into search box
Dim inp
Set inp = doc.querySelector("input[class=select2-search__field]")
inp.Value = "BR"
' Send input event to trigger searching of text 'BR"
Dim kev
Set kev = doc.createEvent("KeyboardEvent")
kev.initEvent "input", True, False
inp.dispatchEvent kev
'ie.Quit
End Sub
Private Sub SendMouseDownEvent(doc As MSHTML.HTMLDocument, target As IEventTarget)
Dim mev As Object
Dim eventType As String
Dim canBubble As Boolean
Dim cancelable As Boolean
Dim viewArg As IHTMLWindow2
Dim detailArg As Long
Dim screenXArg As Long
Dim screenYArg As Long
Dim clientXArg As Long
Dim clientYArg As Long
Dim ctrlKeyArg As Boolean
Dim altKeyArg As Boolean
Dim shiftKeyArg As Boolean
Dim metaKeyArg As Boolean
Dim buttonArg As Object ' Unsupported Variant-Type
Dim relatedTargetArg As IEventTarget
Set mev = doc.createEvent("MouseEvent")
eventType = "mousedown"
canBubble = True
cancelable = False
Set viewArg = doc.parentWindow
Set relatedTargetArg = target
mev.initMouseEvent eventType, canBubble, cancelable, viewArg, _
detailArg, screenXArg, screenYArg, clientXArg, clientYArg, _
ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg, buttonArg, _
relatedTargetArg
target.dispatchEvent mev
End Sub
<小时/>
解决方案 2
另一个想法是将焦点
放在选择
上,然后简单地发送{ENTER}
,这与用户打开时相同选择
。我们需要打开 selection
,因为这样 input
将被添加到 DOM 中(否则它不存在)。以下代码对我有用。
请注意 SetFocusIE
,它确保 IE-Window
处于事件状态,因此 SendKeys
将瞄准正确的窗口。 HTH。
Option Explicit
' Add reference to Microsoft Internet Controls (SHDocVw)
' Add reference to Microsoft HTML Object Library
Private Declare Function SetFocusIE Lib "user32" Alias "SetFocus" _
(ByVal hwnd As Long) As Long
Sub Select2Demo2()
Dim ie As SHDocVw.InternetExplorer
Dim doc As MSHTML.HTMLDocument
Dim url As String
url = "file:///C:/Temp/StackOverflow/html/Select2VbaDemo.html"
Set ie = New SHDocVw.InternetExplorer
ie.Visible = True
ie.navigate url
While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE
DoEvents
Wend
Set doc = ie.document
Dim sp As HTMLSpanElement
Set sp = doc.querySelector("span[class^=select2-selection]")
sp.Click ' Selection gets focus
SetFocusIE ie.hwnd ' IE gets active window
SendKeys "~", True ' Sends ENTER: Selection opens
' put value to search box then
Dim inp
Set inp = doc.querySelector("input[class=select2-search__field]")
inp.Value = "BR"
ie.Quit
End Sub
<小时/>
Sample page used
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- saved from url=(0016)http://localhost -->
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<script type="text/javascript" src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.js"></script>
<title>Untitled 1</title>
</head>
<body>
<script type="text/javascript">
$(document).ready(function() {
$("#s2id_beanCounter").select2();
});
</script>
<div class="s2-example" >
<label class="control-label" for="s2id_beanCounter">
Enter Employee Name
<select class="js-example-basic-single js-states form-control" id="s2id_beanCounter" style="width:100%">
<option value="JD">John Doe</option>
<option value="BL">Bruce Lee</option>
</select>
</label>
</div>
</body>
</html>
<小时/>
Result im IE
EDIT: For Version 3.4.1 of select2
在 3.4.1 版本中,它看起来有所不同。此函数负责选择突出显示的元素:
this.dropdown.on("mouseup", resultsSelector, this.bind(function (e) {
if ($(e.target).closest(".select2-result-selectable").length > 0) {
this.highlightUnderEvent(e);
this.selectHighlighted(e);
}
}));
因此,以下代码可用于突出显示并选择过滤后的元素之一。 HTH
Option Explicit
' Add reference to Microsoft Internet Controls (SHDocVw)
' Add reference to Microsoft HTML Object Library
Sub Select2DemoVersion341()
Dim ie As SHDocVw.InternetExplorer
Dim doc As MSHTML.HTMLDocument
Dim url As String
url = "file:///C:/Temp/StackOverflow/html/select2demo/Select2VbaDemo.html"
Set ie = New SHDocVw.InternetExplorer
ie.Visible = True
ie.navigate url
While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE
DoEvents
Wend
Set doc = ie.document
' Get reference to target serach input box before select2 starts to mess up with the DOM when the select opens
Dim inp As HTMLInputElement
Set inp = doc.querySelector("div[class^=select2-container] input[class=select2-input]")
' Open drop down
Dim select2Choice As HTMLAnchorElement
Set select2Choice = doc.querySelector("a[class^=select2-choice]")
SendMouseEvent doc, select2Choice, "mousedown"
' Put value into search box
inp.Value = "mengela"
' Send input event to trigger searching of text 'mengela"
Dim kev
Set kev = doc.createEvent("KeyboardEvent")
kev.initEvent "input", True, False
inp.dispatchEvent kev
' Get the search results
Dim selectResultUl As HTMLUListElement
Set selectResultUl = doc.querySelector("ul[class=select2-results]")
If selectResultUl.Children.Length = 1 Then
' Verify 'No results found' posibility
If selectResultUl.Children(0).className = "select2-no-results" Then
MsgBox "No results"
ie.Quit
Exit Sub
End If
End If
' Deselect currently selected item by removing select2-highlighted class
Dim selectedResultsLis As IHTMLElementCollection
Dim selectResultsLi As HTMLLIElement
Set selectedResultsLis = selectResultUl.getElementsByTagName("li")
For Each selectResultsLi In selectedResultsLis
If selectResultsLi.className Like "*select2-highlighted*" Then
selectResultsLi.className = VBA.Strings.Replace(selectResultsLi.className, "select2-highlighted", "")
Exit For
End If
Next selectResultsLi
' Select another li-element, e.g. last one by adding select2-highlighted class
Dim newSelectionLi As HTMLLIElement
Set newSelectionLi = selectedResultsLis(selectedResultsLis.Length - 1)
newSelectionLi.className = newSelectionLi.className & " select2-highlighted"
' Send mouseup to result label to select the highligted element
Dim resultLabel As HTMLDivElement
Set resultLabel = newSelectionLi.getElementsByClassName("select2-result-label")(0)
SendMouseEvent doc, resultLabel, "mouseup"
'ie.Quit
End Sub
Private Sub SendMouseEvent(doc As MSHTML.HTMLDocument, target As IEventTarget, eventTypeVal)
Dim mev As Object
Dim eventType As String
Dim canBubble As Boolean
Dim cancelable As Boolean
Dim viewArg As IHTMLWindow2
Dim detailArg As Long
Dim screenXArg As Long
Dim screenYArg As Long
Dim clientXArg As Long
Dim clientYArg As Long
Dim ctrlKeyArg As Boolean
Dim altKeyArg As Boolean
Dim shiftKeyArg As Boolean
Dim metaKeyArg As Boolean
Dim buttonArg As Object ' Unsupported Variant-Type
Dim relatedTargetArg As IEventTarget
Set mev = doc.createEvent("MouseEvent")
eventType = eventTypeVal
canBubble = True
cancelable = False
Set viewArg = doc.parentWindow
Set relatedTargetArg = target
mev.initMouseEvent eventType, canBubble, cancelable, viewArg, _
detailArg, screenXArg, screenYArg, clientXArg, clientYArg, _
ctrlKeyArg, altKeyArg, shiftKeyArg, metaKeyArg, buttonArg, _
relatedTargetArg
target.dispatchEvent mev
End Sub
3.4.1版本的select2.js/css演示页面可以从我的dropbox下载作为 zip 文件。
关于jquery - 填充使用 Select2 创建的 HTML 输入框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44545772/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!