我有一堆复选框,用户可以从他们想要加载的系统列表中选择。复选框的创建方式如下所示:
'***************************************************************
' Print systems from DB in a table for the load page.
'***************************************************************
Function PrintSystemTable()
Set con = CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & systemsDBPath
Set systemRs = CreateObject("ADODB.Recordset")
systemRs.CursorLocation = adUseClient
Set sensorRs = CreateObject("ADODB.Recordset")
sensorRs.CursorLocation = adUseClient
document.write("<table class=satelliteList>")
document.write("<tr class=""tableHeader"">")
document.write("<td>Select</td>")
document.write("<td width=""100"">System Name</td>")
document.write("<td width=""100"">Description</td>")
document.write("<td width=""75"">Files</td>")
document.write("</tr>")
systemRs.Open "SELECT * FROM System ORDER BY SystemName", _
con, adOpenStatic, adLockOptimistic
do until systemRs.eof
document.write("<tr valign=""top"">")
document.write("<td>")
document.write("<INPUT TYPE=CHECKBOX NAME=""system"" VALUE=""" & systemRs("SystemName") & """>")
document.write("</td>")
document.write("<td>")
document.write(systemRs("SystemName"))
document.write("</td>")
document.write("<td>")
document.write(systemRs("Description"))
document.write("</td>")
document.write("<td>")
document.write(guiPath & systemRs("Satellite"))
sensorRs.Open "SELECT * FROM SystemSensors WHERE System='" & systemRs("SystemName") & "'", _
con, adOpenStatic, adLockOptimistic
do until sensorRs.eof
document.write("<br>" & guiPath & sensorRs("Sensor"))
sensorRs.movenext
loop
sensorRs.Close
document.write("</td>")
'adoDBRecordset("FieldName") & "<br>")
document.write("</tr>")
systemRs.movenext
loop
document.write("</table>")
con.Close
End Function它们不是以某种形式出现的。我试图通过它们的名称(system)访问我的复选框,并遍历它们,看看哪个被选中了。
'find the systems that are selected
'access an array of all the checkboxes?
Dim checkboxes
Set checkboxes = document.getElementsByName("system")
'For i=0 to UBound(checkboxes)
For Each chk in checkboxes
' If (checkboxes(i).checked = true) Then
If (chk.checked = true) Then
document.write("A checkbox is checked <br>")
Else
document.write("Unchecked <br>")
End If
'document.write(chk.value & "<br />")
Next我已经尝试使用for和for each循环进行迭代。无论哪种方式,我都会得到相同的错误。下面是发生的情况:
现在,我的数据库中有两个测试样本,所以我可以选择两个东西。如果我选择第一个项目并按下运行我的检查器脚本的按钮,它会打印"A checkbox is checked“,并在我的页面上得到一个错误(权限被拒绝),告诉我不能访问checked属性。它不会打印“未选中”。如果我选择了我的第二个项目,没有选中第一个项目,它会打印“未选中”,而不会打印"A checkbox is checked“。
如果我选择了这两个项目,它会打印"A checkbox is checked“一次,并给出相同的错误。
如果我没有选择任何一个项目,它会打印一次“未选中”(而不是每个未选中的项目一次),并且我得到相同的权限被拒绝的错误,告诉我我不能访问选中的属性。
在开始测试选中的值之前,我尝试打印每个复选框的值,但尝试访问value属性时也会显示权限被拒绝。
奇怪的是,它似乎对第一个元素“有效”(因为它将只为一个元素打印适当的消息),即使它仍然抛出一个权限被拒绝的错误。这让我相信我要么没有正确使用document.getElementsByName() (它返回一个数组吗?),要么我没有正确地迭代……或者其他一些我无法理解的谜团。
这是客户端vbscript,不是ASP。Javascript也不是一种选择;出于特定的原因,我将客户端vbscript与HTML结合使用。不要为我为什么要使用它而烦恼,告诉我它很愚蠢,因为我同意;我别无选择。
如何访问和迭代具有相同名称(系统)的复选框,并查看选中了哪些复选框并获取它们的值?
发布于 2010-07-23 03:56:39
页面加载后的任何document.write()都将替换整个页面,这就是为什么脚本只找到第一个复选框,而没有找到其他复选框的原因。
我已经按如下方式修改了您的代码,现在一切工作正常:
<SCRIPT LANGUAGE="VBScript">
<!--
Dim checkboxes
Set checkboxes = document.getElementsByName("system")
Set e = document.createElement("p") 'ADDED
document.body.appendChild e 'ADDED
' For i=0 to UBound(checkboxes)
For Each chk in checkboxes
' If (checkboxes(i).checked = true) Then
If (chk.checked = true) Then
e.innerHtml = e.InnerHtml + "A checkbox is checked <br>" 'MODIFIED
Else
e.innerHtml = e.InnerHtml + "Unchecked <br>" 'MODIFIED
End If
'document.write(chk.value & "<br />")
Next
</SCRIPT>我希望这能回答你的问题。
https://stackoverflow.com/questions/3301090
复制相似问题