【问题标题】:Allow radio button to be checked only once to select its unique value只允许单选按钮被选中一次以选择其唯一值
【发布时间】:2017-08-31 14:29:57
【问题描述】:

我有“n”条 SQL 语句返回的行数。它工作正常。对于返回的每一行,我希望用户选择一个选项(Pass=1、Fail=2、NA=3)并在提交时将这些值(1、2、3)插入到数据库表中。

但是,当我尝试获取用户选择的单选按钮的值以及其他值(例如 CategoryID 或 SubcatID)时遇到了问题。

动态的HTML表单是这样的:

Category table
CategoryID   Category
------------
01      cat
02      cat 2
03      cat 3

Subcat table
SubcatID   Subcat   Category_id
-------------------------
1       Jenny     01
2       Emmy      01
3       James      02
4       Hudson     02
5       Mike      03

报告表输出应该是:

ReportID   CategoryID   SubcatID   Scale
------------------------------------------
1          01           1          1
2          01           2          1
3          02           3          2
4          02           4          2
5          03           5          3

也就是说,我每次提交表单时,都会有5条记录插入到一​​个表中。如果我将另一个子类别添加到一个主类别中,那么将有 6 条记录添加到一个表中。

目前,报告表显示这个,这是错误的:

ReportID   CategoryID   SubcatID   Scale
------------------------------------------
1      01, 02, 03   1, 2, 3, 4, 5   empty

这是我的 ASP 代码:

If Request.Form("FormSource") = "SubmitForm" Then
   sReportID = Request.Form("ReportID")
   sCategoryID = Request.Form("CategoryID")
   sSubcatID = Request.Form("SubcatID")
   sScale = Request.Form("Scale")

SQL = "SET NOCOUNT ON;" &_
    "INSERT INTO Report (ReportID, CategoryID, SubcatID, Scale) VALUES " &_
    "('" & SCategoryID & "', '" & SSubcatID & "', '" & SCategoryID & "', '" & SScale & "');" &_
    "SELECT @@IDENTITY AS ReportID"
Set  objRS = objCon.Execute (SQL)
    sReportID = objRS.Fields("ReportID").value
objRS.Close
End If
%>

<form action="" method="post" id="newCategory">
<table>
<tr>
<td>Category and sub</td>
<td>Pass</td>
<td>Fail</td>
<td>NA</td>
</tr>

<%
  currCat = ""
  sSQL = "SELECT s.*, c.* FROM Category c, Subcat s WHERE s.Subcat_id = c.Subcat_id "
  objRS.Open sSQL, objCon
  response.Write sSQL
  Do Until objRS.EOF
    sCategory = objRS("Category")
    sSubcat = objRS("Subcat")

    if currCat <> sCategory Then
       currCat = sCategory 
    %>
<tr><td><%=sCategory%></td></tr>
        <input type="hidden" name="CategoryID" size="40" maxlength="50" value="<%=sCategory%>">
       <%
    End If
    %>
<tr><td><%= sSubcat %></td>
      <input type="hidden" name="SubcatID" size="40" maxlength="50" value="<%= sSubcat %>">
    <td><input size="20" type="radio" name="<%=sCategory%>" value="1"></td>
    <td><input size="20" type="radio" name="<%=sCategory%>" value="2"></td>
    <td><input size="20" type="radio" name="<%=sCategory%>" value="3"></td>
</tr>
<%
    objRS.MoveNext
  Loop

   objRS.Close
%>
</table>
<input type="hidden" name="FormSource" value="CatSubmit">
<input type="button" value="Update" onclick="submitForm();">

非常感谢!

【问题讨论】:

  • 我能够通过在每个输入框中的名称上添加 来弄清楚如何选择每个单选按钮。即使我检查了不同的框,我也不知道为什么所有字段都为“0”。谢谢。
  • 我修复了您问题中的一些代码。如果您设法解决了您的问题,我建议您发布答案并将其标记为已接受。
  • 我仍然无法正常工作。我得到了正确的 ReportID 输出。但是,Scale 是空值。类别 ID:2、5、7 和子类别 ID:1、2、3。它们应该是每行一个唯一的 ID。有人可以帮忙吗?
  • 您能否更新您的问题以显示您现在使用的代码?
  • BoffinbraiN,我更新了我的问题。请帮忙。谢谢。

标签: javascript jquery arrays vbscript asp-classic


【解决方案1】:

我认为您想要做的是使用 SubcatID 而不是 CategoryID 命名您的单选按钮组,因为 subcat 是表中每一行的独特之处。如您所见,使用 categoryID 会导致多个单选按钮值聚集在一起,并用逗号分隔。

您可以为输入命名,例如 subcatX,其中 X 是该行的实际 SubcatID。例如:

<input type="radio" name="subcat<%= sSubcat %>" value="1">

当您加载页面以处理表单数据时,您将知道您对哪些 Subcats 感兴趣,并遍历它们以查找与其关联的表单数据的存在。伪代码看起来像这样:

(for all subcatIDs you care about)
    val = Request.Form("subcat" & subcatID)
    If val <> "" Then
       ...

PS。您的单选按钮不需要size 属性,您的隐藏表单字段也不需要size 或maxlength。

附加信息:如何通过迭代 Request.Form

找到您的表单字段

这个 sn-p 代码应该可以帮助您准确地发现您要回发的内容,以便您可以分析它并获取正确的子目录 ID。如果你这样做,你甚至不需要提前知道你的恶魔的名字,因为你可以遍历所有这些并检查它们是否符合你的模式。

    <%
        Dim i, key, val
        For Each i In Request.Form
            key = Request.Form.Key(i)
            val = Request.Form.Item(i)
            Response.Write key & " = " & val & "<br>"
        Next
    %>
    <form action="?" method="post">
        <input type="hidden" name="a" value="A" />
        <input type="hidden" name="a" value="B" />
        <input type="hidden" name="c" value="C" />
        <input type="submit" />
    </form>

如果你自己运行这个,你会发现输出是

a = A, B
c = C

请注意值 A 和 B 如何自动串在一起,因为它们具有相同的字段名称。你想避免这种情况。

【讨论】:

  • 我改了name="subcat,输出是一样的。不明白怎么改:val = Request.Form("subcat" & subcatID)。可以你写的更详细?我不知道如何开始并更改我的代码以使其正常工作。谢谢。
  • 在您收集表单数据的代码中:If Request.Form("FormSource") = "SubmitForm" 您需要更改它以查找特定值,例如我写的Request.Form("subcat" &amp; subcatID)。或者,您可以遍历整个 Request.Form 集合并以这种方式保存每个集合。
  • 我是新手。你能告诉我如何查找 subcat 的特定值吗?换句话说,你能给我写一段代码,这样我就可以从其他人开始了吗?谢谢。
  • @JennyTran 我已经扩展了我的答案,因此请展示您如何查看表单帖子中的值。
  • 我试图通过创建那个循环来改变。我用 subcatID 替换了 key,但它不起作用。我更改了 name="subcat。它不起作用。我如何收件箱?
猜你喜欢
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 2010-11-02
相关资源
最近更新 更多