如何在ASPX网站的下拉列表中选择特定项目 [英] How to select an specific item on a drop down list on ASPX site
问题描述
我希望它就像用户单击牙科一样。但是,当我运行以下代码时,没有任何反应。
我希望它就像用户单击牙科一样。但是,当我运行以下代码时,没有任何反应。
我希望它就像用户单击牙科一样。但是,当我运行以下代码时,什么也没发生。
I want it to be as if the user had clicked on "Dental." However, when I run the following code, nothing happens. I want it to be as if the user had clicked on "Dental." However, when I run the following code, nothing happens. I want it to be as if the user had clicked on "Dental." However, when I run the following code, nothing happens.
'Public Sub IE_Search_and_Extract()
'Dim URL As String
'Dim IE As SHDocVw.InternetExplorer
'Dim HTMLdoc As HTMLDocument
'Dim response As String
'response = MsgBox("Login ", vbYesNo + vbQuestion, "login")
'If response = vbYes Then
' URL = " "
'Else
'End If
'Set IE = Get_IE_Window(URL)
'If IE Is Nothing Then
' Set IE = New SHDocVw.InternetExplorer
'End If
' With IE
' SetForegroundWindow .hwnd
' .navigate URL
' .Visible = True
' While .Busy Or .readyState <> READYSTATE_COMPLETE
' DoEvents
'Wend
' '.document.getElementById("btnLogin").Click
' ' While .Busy Or .readyState <> READYSTATE_COMPLETE
' DoEvents
' Wend
Application.Wait (Now + TimeValue("0:00:5"))
Set HTMLdoc = .document
End With
'Dim post As Object, elem As Object
'For Each post In HTMLdoc.getElementsByClassName("cboItem")
' If InStr(post.innerText, "Dental") > 0 Then post.Click: Exit For
'Next post
'End Sub
推荐答案
此特定网页未使用< select>
和< option> ;
。这向我暗示了他们正在使用一些自定义JavaScript来模拟下拉列表,其中使用了图示的< div>
和< span>
元素。此外,他们使用 onselect
而不是 onclick
来触发事件处理程序。
This particular web page isn't using <select>
and <option>
. That suggests to me that they are using some custom JavaScript to simulate a drop-down list using the illustrated <div>
and <span>
elements. In addition, they are using onselect
rather than onclick
to trigger event handlers.
我无法复制您的测试用例。但是,我确实做了一个自己的测试用例,并且我认为它是可行的。简而言之,将 post.Click
替换为 post.onselect
。您的代码的问题在于,它试图触发目标< span> $ c上不存在的
onclick
处理程序$ c>!
I can't replicate your test case. However, I did make a test case of my own, and I think it works. In short, replace post.Click
with post.onselect
. The problem with your code was that it was trying to trigger an onclick
handler that didn't exist on the target <span>
!
<html>
<head>
<script type="text/javascript">
function clk() { alert('Dental clicked'); } // *** So I could see if Click had an effect
function sel() { alert('Dental selected'); } // *** Simulate the given testcase
</script>
</head>
<body>
<div class="cboGroupGrid">
<span class="cboItem" option="0"></span>
<span class="cboItem" option="1" onselect="sel();" onclick="clk();">Dental</span>
<span class="cboItem" option="2">Health</span>
<span class="cboItem" option="3">Unknown Product</span>
</div>
</body></html>
VBA
在以下代码中, '''是我注释掉的东西,因为我没有它们,而且按照我的理解,它们对于任务不是必需的。
VBA
In the code below, '''
are things I commented out because I didn't have them and they weren't essential to the task as I understand it.
Public Sub IE_Search_and_Extract()
Dim URL As String
Dim IE As SHDocVw.InternetExplorer
Dim HTMLdoc As HTMLDocument
Dim response As String
'''response = MsgBox("Login ", vbYesNo + vbQuestion, "login")
'''If response = vbYes Then
''' URL = " "
'''Else
'''End If
URL = "prashant.htm" ' ** Local testcase
'''Set IE = Get_IE_Window(URL) ' ** I don't have the code for this function
'''If IE Is Nothing Then
Set IE = New SHDocVw.InternetExplorer
'''End If
With IE
'''SetForegroundWindow .Hwnd ' ** I don't have this function
.navigate URL
.Visible = True
While .Busy Or .readyState <> READYSTATE_COMPLETE
DoEvents
Wend
'.document.getElementById("btnLogin").Click
' While .Busy Or .readyState <> READYSTATE_COMPLETE
' DoEvents
' Wend
'Application.Wait (Now + TimeValue("0:00:5"))
Set HTMLdoc = .document
End With
Dim post As Object, elem As Object
For Each post In HTMLdoc.getElementsByClassName("cboItem")
If InStr(post.innerText, "Dental") > 0 Then ' ** Use a block If, not inline.
'post.Click ' ** This does work, and triggers clk()
post.onselect ' ** This triggers sel()
Exit For
End If
Next post
End Sub
风格建议:如果某件物品中有多个物品然后
或 Else
块,请始终使用多行形式。这样,对于:
是否结束 Then
块就不会产生歧义。
Style suggestion: If you have more than one thing in a Then
or Else
block, always use the multiline form. That way there's no ambiguity about whether the :
ends the Then
block or not.
这篇关于如何在ASPX网站的下拉列表中选择特定项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!