代码之家  ›  专栏  ›  技术社区  ›  Tim Santeford

如何使复选框具有与其他输入相同的提交行为?

  •  1
  • Tim Santeford  · 技术社区  · 16 年前

    我有一个搜索表单,默认情况下会选中几个复选框。当表单作为GET提交时,URL将只包含未选中的复选框列表。

    http://www.example.com/page/?checkbox1=yes&checkbox2=yes
    

    在这种情况下,很难确定用户第一次到达此搜索页面的时间与他们提交表单时所有复选框都未选中之间的差异,因为查询字符串看起来相同。

    为了解决这个问题,我已经开始在具有相同名称和“no”值的复选框之前插入隐藏字段。当复选框被取消选中时,浏览器将发送隐藏字段的“否”值,当复选框被设置时,浏览器将用复选框的“是”值覆盖隐藏字段。

    <input type="hidden" name="checkbox1" value="no" />
    <input type="checkbox" name="checkbox1" value="yes" />
    

    当用户在未选中所有复选框的情况下提交表单时,我将获取此查询字符串:

    http://www.example.com/page/?checkbox1=no&checkbox2=no
    

    这似乎适用于FF、Chrome、IE5.5+,所以我可以安全地使用此方法,还是有更好的方法使复选框像输入和选择一样提交?

    3 回复  |  直到 16 年前
        1
  •  2
  •   2ndkauboy    16 年前

    这真是个聪明的主意。因为未选中的复选框不会出现在请求中,这确实有助于了解用户是否第一次输入表单。

    但要知道,您只需使用具有默认值的隐藏字段。因此,当用户输入表单时,不设置参数。一旦他提交了表单,就设置了值。

    您还可以使用提交按钮的名称,然后可以查看它是否已提交:

    <input type="submit" name="submit" />
    

    这能解决你的问题吗?

        2
  •  0
  •   Quentin    16 年前

    解决实际问题:

    确定用户第一次到达此搜索页的时间与他们在未选中所有复选框的情况下提交表单的时间之间的差异

    沿着

    <input type="hidden" name="submitted" value="true">
    

    然后可以分组使用复选框:

    <input type="checkbox" name="foo" value="bar" id="foo_bar">
    <label for="foo_bar">Bar</label>
    
    <input type="checkbox" name="foo" value="baz" id="foo_baz">
    <label for="foo_baz">Baz</label>
    

    然后您可以在服务器上对它们进行循环。如何做到这一点取决于服务器端环境。在大多数语言中,您可以调用返回数据数组的方法(IrcJava表单LIBs倾向于这样工作)或只请求数组上下文中的数据(Perl LIBs通常以这种方式操作)。PHP是服务器端编程的通用语言,有点奇怪,它要求您重命名字段以字符结尾。 [] .

        3
  •  -1
  •   smdrager    16 年前

    如你所说,它似乎工作得很好。或者,您可以避免让它像普通输入一样工作,只需检查输入是否存在(如果输入不存在,则将其视为假,如果存在,则将其视为真)。

    例如,在php中

    if(isset($_get['checkbox1'])…}

    ASP.NET

    如果(request.querystring[“checkbox1”]!{NULL){…}

    当然,您可能有自己的理由想要做那个客户端。

    推荐文章