首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问复选框属性时出现问题(客户端vbscript)

访问复选框属性时出现问题(客户端vbscript)
EN

Stack Overflow用户
提问于 2010-07-21 23:38:53
回答 1查看 2.5K关注 0票数 1

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

代码语言:javascript
运行
复制
'***************************************************************
' 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)访问我的复选框,并遍历它们,看看哪个被选中了。

代码语言:javascript
运行
复制
'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结合使用。不要为我为什么要使用它而烦恼,告诉我它很愚蠢,因为我同意;我别无选择。

如何访问和迭代具有相同名称(系统)的复选框,并查看选中了哪些复选框并获取它们的值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-23 03:56:39

页面加载后的任何document.write()都将替换整个页面,这就是为什么脚本只找到第一个复选框,而没有找到其他复选框的原因。

我已经按如下方式修改了您的代码,现在一切工作正常:

代码语言:javascript
运行
复制
<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>

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3301090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档