无法访问复选框属性(客户端vbscript)

时间:2010-07-21 15:38:53

标签: html vbscript properties checkbox

我有一堆复选框,用户可以从他们想要加载的系统列表中进行选择。复选框的创建方式如下:

'***************************************************************
' 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

它们不是一种形式。我试图通过他们的名字(系统)访问我的复选框,并迭代它们以查看哪个被检查。

'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循环。我得到同样的错误。以下是发生的事情:

现在我的数据库中有两个测试样本,所以我可以选择两件事。如果我选择第一个项目并按下运行我的检查程序脚本的按钮,则会打印“选中一个复选框”,我的页面上出现错误(权限被拒绝),说我无法访问已检查的属性。它不打印“未选中”。如果我选择我的SECOND项目,取消选中第一项,则打印“未选中”并且不打印“选中复选框”。

如果我选择这两个项目,则会打印“选中一个复选框”,并给出相同的错误。

如果我没有选择任何一个项目,它会打印“未选中”ONCE(而不是每个未检查项目一次),我得到相同的权限拒绝错误,告诉我无法访问已检查的属性。

在我开始测试已检查的值之前,我尝试打印每个复选框的值,但尝试访问value属性也让我被拒绝。

奇怪的是它似乎对第一个元素“工作”(因为它只为一个元素打印一条适当的消息),即使它仍然会抛出一个权限被拒绝的错误。这让我相信我要么没有正确使用document.getElementsByName()(它是否返回一个数组?),或者我没有正确迭代......或者其他一些超出我的神秘感。

这是CLIENT-SIDE vbscript,而不是ASP。 Javascript也不是一个选项;我出于特定原因使用客户端vbscript和HTML。不要为自己使用它而烦恼自己并告诉我这是愚蠢的,因为我同意;我没有选择。

如何访问和遍历我的同名(系统)复选框,看看哪些被检查并获得它们的价值?

1 个答案:

答案 0 :(得分:1)

页面加载后的任何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>

我希望这能回答你的问题。

相关问题