2010-07-21 4 views
1

로드하려는 시스템 목록에서 사용자가 선택할 수있는 확인란이 여러 개 있습니다. 체크 박스는 다음과 같이 생성됩니다.체크 박스 속성 액세스 문제 (클라이언트 측 vbscript)

'*************************************************************** 
' 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 루프를 모두 반복하여 사용해 보았습니다. 나는 어느 쪽의 방법이라도 같은 실수를 얻는다. 결과는 다음과 같습니다.

지금 당장 데이터베이스에 두 개의 테스트 샘플이 있으므로 선택할 수있는 두 가지 항목이 있습니다. 첫 번째 항목을 선택하고 내 검사기 스크립트를 실행하는 버튼을 누르면 "확인란 선택됨"이 인쇄되고 확인 된 속성에 액세스 할 수 없다는 내용의 내 페이지에 오류 (권한 거부)가 표시됩니다. "선택 취소"가 인쇄되지 않습니다. 첫 번째 항목을 선택하지 않은 상태에서 두 번째 항목을 선택하면 "선택 취소됨"이 인쇄되고 "선택란이 선택되었습니다"가 인쇄되지 않습니다.

두 항목을 모두 선택하면 "선택란이 선택되었습니다"라는 문구가 한 번 인쇄되고 동일한 오류가 발생합니다.

항목 중 하나를 선택하지 않으면 체크되지 않은 항목 당 한 번이 아닌 한 번만 "선택 취소됨"이 인쇄되고 체크 된 속성에 액세스 할 수 없다는 동일한 권한 거부 오류가 표시됩니다.

확인한 값에 대한 테스트를 시작하기 전에 각 확인란의 값을 인쇄하려고했지만 value 속성에 액세스하려고 시도했을 때 권한이 거부되었습니다.

이상한 점은 여전히 ​​권한이 거부 된 오류가 발생하더라도 첫 번째 요소에 대해 "작동 중"인 것입니다 (한 요소 만 적절한 메시지를 인쇄하므로). 이것은 내가 document.getElementsByName()을 제대로 사용하지 않는다고 (또는 배열을 반환합니까?), 아니면 제대로 반복하지 않고 있다고 생각하게 만듭니다. 아니면 저를 넘어서는 다른 수수께끼입니다.

이것은 CLIENT-SIDE 인 vbscript이며 ASP가 아닙니다. Javascript도 옵션이 아닙니다. 특정 이유로 클라이언트 측 vbscript에 HTML을 사용하고 있습니다. 내가 왜 그것을 사용하고 있으며 내가 동의하기 때문에 바보라고 말하면서 자신을 괴롭히지 마십시오. 나는 선택의 여지가 없다.

동일한 이름 (시스템)의 확인란을 어떻게 액세스하고 반복 할 수 있으며, 어떤 것이 선택되어 있는지 확인하고 그 값을 얻을 수 있습니까?

답변

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> 

나는이 질문에 대한 답변이 되었기를 바랍니다.

+0

굉장! 감사! 나는 내 코드의 나머지 부분을 방해하는 document.write에 대해서 생각조차하지 않았다. – Lauren