HTA VBScript复选框长度(按ID)

时间:2014-10-07 23:07:33

标签: checkbox vbscript hta

我有一系列复选框,我试图系统地循环,但我很难使用GetElementsbyID获取复选框数组的.Length。

以下是我的HTML的简短示例(省略括号):

input type="checkbox" Name="A" ID="A1" Value="Some Value" checked="True"

input type="checkbox" Name="A" ID="A2" Value="Some Value" checked="True"

input type="checkbox" Name="B" ID="B1" Value="Some Value" checked="True"

input type="checkbox" Name="B" ID="B2" Value="Some Value" checked="True"

input type="checkbox" Name="B" ID="B3" Value="Some Value" checked="True"

等等通过D4

我尝试过以下方法:

document.getElementByID(chr(65)).Length

document.getElemenstByID(chr(65)).Length

document.getElementByID("A").Length

document.getElementsByID("A").Length

我也尝试过:

somevar = document.getElementByID("A")

arraylength = somevar.Length

Set someobj = document.getElementByID("A")

For Each Checkbox in someobj

Next

在每种情况下我都得到一个Object不支持这种方法。我可以使用此方法获取.Name和.Value,但我无法获得.Length。我甚至试图在黑暗中使用.Count作为一个镜头。正如你所看到的,我有点抓住稻草。

以下是我要编写的代码。它存在于一个功能中:

For AtoD = 65 to 68

  For DoTheThing = 1 to document.getElementByID(chr(AtoD)).Length

   'do some stuff

Next

Next

顺便说一句,如果我用“A”代替chr(65),它仍然会失败。我可以为每个A到D部分编写一个单独的循环,但我正在尝试使用高效且可重用的代码。有没有办法获取checkbox.Length使用getElementbyID ...或真的任何其他方法?

提前致谢。

======================================== 更新如下:

好的,这是整个脚本。这是背景:我正在准备一些计算机部署到需要纠正错误的领域(因为一些傻瓜错误配置了它们)。我将提供一个选项列表,以便技术人员可以在情境中更改选项。

我已经创建了复选框,如您所见。我想要做的是将关联SPAN的InnerHTML设置为复选框的值。因此,例如,SA1.InnerHTML = A1.Value。它使我无法在复选框标记为什么以及实际执行的操作之间创建不一致。

所以,这是目前的代码。我得到的对象不支持第25行的属性或方法:

<html> 
<head> 
<title>Elections Computer Pre-Deploy Doodad</title> 
<HTA:APPLICATION 
     APPLICATIONNAME="PreDeploy"
     BORDER="thin"
     SCROLL="auto"
     SCROLLFLAT="no"
     MAXIMIZEBUTTON="no"
     MINIMIZEBUTTON="no"
     NAVIGATABLE="no"
     SELECTION="yes"
     SINGLEINSTANCE="yes"
     WINDOWSTATE="normal"
     SYSMENU = "yes"
     ICON="res://shell32.dll/2/217"
>

<script language="VBscript"> 
window.resizeTo 1200,800
window.moveTo 10,10

Function DrawScreen
    For AtoD = 65 to 68
        For DoTheThing = 1 to document.getElementByID(chr(AtoD)).Length
            document.getElementByID("S"&chr(AtoD)&DoTheThing).innerText = document.getElementByID(chr(AtoD)&DoTheThing).Value
        Next
    Next    
End Function

</script> 
<body style="font-family:Trebuchet MS; font-size: 18px" onLoad = "DrawScreen()"> 
<table border="1">
<tr><td ID="LEFT" valign="top" style="width:400px">
    <B>Delete Desktop Shortcuts:</B><BR>
    <input type="checkbox" Name="A1" ID="A" Value="SANDBOX webSCORE.website" checked="True"> <SPAN ID="SA1"></SPAN><BR>
    <input type="checkbox" Name="A2" ID="A" Value="SANDBOX webSCORE Login.website" checked="True"> <SPAN ID="SA2"></SPAN><BR>
    <input type="checkbox" Name="A3" ID="A" Value="webSCORE Login LIVE.website" checked="True"> <SPAN ID="SA3"></SPAN><BR>
    <input type="checkbox" Name="A4" ID="A" Value="webSCORE LIVE.website" checked="True"> <SPAN ID="SA4"></SPAN><BR>
    <input type="checkbox" Name="A5" ID="A Value="Lenovo Solution Center.lnk" checked="True"> <SPAN ID="SA5"></SPAN><BR>
    <input type="checkbox" Name="A6" ID="A" Value="Adobe Reader XI.lnk" checked="True"> <SPAN ID="SA6"></SPAN><BR>
    <input type="checkbox" Name="A7" ID="A" Value="DYMO Label v.8.lnk" checked="True"> <SPAN ID="SA7"></SPAN><BR>
    <BR>
    <B>Add Desktop Icons</B><BR>
    <input type="checkbox" Name="B1" ID="B" Value="webSCORE Live Link" checked="True"> <SPAN ID="SB1"></SPAN><BR>
    <input type="checkbox" Name="B2" ID="B" Value="webSCORE Sandbox Link" checked="True"> <SPAN ID="SB2"></SPAN><BR>

</td><td ID="RIGHT" valign="top" style="width:400px"> 
    <B>Printer Nuke Sequence</B><BR>
    <input type="checkbox" Name="C1" ID="C" Value="Copy Dymo Driver to Local PC" checked="True"> <SPAN ID="SC1"></SPAN><BR>
    <input type="checkbox" Name="C2" ID="C" Value="Install Dymo Driver" checked="True"> <SPAN ID="SC2"></SPAN><BR>
    <input type="checkbox" Name="C3" ID="C" Value="Purge all print jobs" checked="True"> <SPAN ID="SC3"></SPAN><BR>
    <input type="checkbox" Name="C4" ID="C" Value="Nuke all print queues" checked="True"> <SPAN ID="SC4"></SPAN><BR>
    <input type="checkbox" Name="C4" ID="C" Value="Create local nuke script" checked="True"> <SPAN ID="SC5"></SPAN><BR> 
    <BR>
    <B>Misc Stuff:</B><BR>
    <input type="checkbox" Name="D1" ID="D" Value="Disable Notifications" checked="True"> <SPAN ID="SD1"></SPAN><BR>
    <input type="checkbox" Name="D2" ID="D" Value="Disable Automatic Updates" checked="True"> <SPAN ID="SD2"></SPAN><BR>
</td></tr>

</table>
<BR>

<BR>

</body> 
</html> 

1 个答案:

答案 0 :(得分:0)

id属性必须是唯一的(因此名称)。不要创建具有相同ID的多个元素。如果要对元素进行分类:请使用class属性。此外,复选框A5的ID缺少结束双引号,并且您有2个名为C4的元素,后者最有可能被命名为C5。另外,用于迭代<input>元素的代码已被破坏。 getElementById()返回IHTMLElement个对象,该对象没有length属性。

name代码中删除id<input>属性(无论如何都不需要),并使该属性的值唯一:

<table border="1">
  <tr>
    <td id="LEFT" valign="top" style="width:400px">
      <b>Delete Desktop Shortcuts:</b><br>
      <input type="checkbox" id="A1" value="SANDBOX webSCORE.website" checked="True"> <span id="SA1"></span><br>
      <input type="checkbox" id="A2" value="SANDBOX webSCORE Login.website" checked="True"> <span id="SA2"></span><br>
      <input type="checkbox" id="A3" value="webSCORE Login LIVE.website" checked="True"> <span id="SA3"></span><br>
      ...
    </td>
    <td id="RIGHT" valign="top" style="width:400px"> 
      ...
    </td>
  </tr>
</table>

然后使用以下内容填充<span>属性:

Set re = New RegExp
re.Pattern = "^[a-z]\d+$"
re.IgnoreCase = True

For Each elem In document.getElementsByTagName("input")
  If re.Test(elem.id) Then
    document.getElementById("S" & elem.id).innerText = elem.value
  End If
Next