复选框由字符串和变量命名。无法让VBScript将其识别为对象

时间:2013-07-27 18:41:52

标签: html vbscript hta

修改后的代码。
错误讯息:Object required:'document.getElementsByName(...)(...)'
行:59
焦炭:13
错误代码:if document.getElementsByName("chk" & arrName(ii))(0).Checked then

<SCRIPT language="VBScript">
Dim arrName(),arrExe()

Set objFS   = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.OpenTextFile("software/software.txt")
strSoftware = objFile.ReadAll
objFile.Close

arrSplit = Split(strSoftware, vbNewLine)

i = 0

For Each strLine in arrSplit
  ReDim Preserve arrName(i + 1)
  ReDim Preserve arrExe(i + 1)
  arrName(i) = TRIM(Left(strLine,InStr(strLine,";")-1))
  arrExe(i) = TRIM(Right(strLine,InStr(strLine,";")))
  strHTML = CheckboxArea.InnerHTML
  strHTML = strHTML & "<BR><INPUT TYPE='CHECKBOX' VALUE='" & arrName(i) & "' NAME ='chk'" & arrName(i) & " />" & arrName(i)
  CheckboxArea.InnerHTML = strHTML
  i = i + 1
Next

Sub Confirm
    Dim objForm, Element
    set objForm=document.forms("SoftwareSelect")
    set Element=objForm.elements
    i=0
    ii=0

    for i=0 to Element.length
        if Element(i).type="checkbox" then
            if document.getElementsByName("chk" & arrName(ii))(0).Checked then 
                MsgBox(arrName(ii) & " is checked.")
            end if
        ii = ii + 1
        end if
    next
End Sub
</SCRIPT>

2 个答案:

答案 0 :(得分:0)

您的代码无法使用。你说arrName是一个字符串数组。字符串不是复选框对象。解决方案非常接近。

只需看一下代码行。这应该有用,不应该吗?

if Element(i).type="checkbox" then
    ii = ii + 1
    if "chk" & Element(i).Checked then 
        MsgBox(arrName(ii) & " is checked.")
    end if
end if

答案 1 :(得分:0)

这样的表达式:

"chk" & arrName(ii).Checked
在将该值连接到字符串Checked之前,

将首先尝试获取存储在数组ii的字段arrName中的对象的"chk"属性的值。你真正想做的是获取名为"chk" & arrName(ii)的元素,然后获取该元素的Checked属性的值。试试这个:

If document.getElementsByName("chk" & arrName(ii))(0).Checked Then
  ...
  • "chk" & arrName(ii)是标识您要获取的元素的name属性的值。
  • document.getElementsByName(...)返回name属性具有该值的所有元素的集合。
  • ...(0).Checked选择该集合中的第一个元素,并返回其Checked属性的值。

作为旁注:您可能希望使用id属性而不是name属性来标识页面中的元素,因为根据定义,该属性在页面中必须是唯一的。这样你就可以通过getElementById()直接检索一个特定的元素,而不必先处理它从一个集合中掏出来。

编辑:如果您想迭代页面中的所有复选框,这样的内容可能更合适:

For Each tag In document.getElementsByTagName("input")
  If LCase(tag.Type) = "checkbox" Then
    'do stuff
  End If
Next