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

Html 如何使复选框具有与其他输入相同的提交行为?,html,forms,webforms,Html,Forms,Webforms,我有一个搜索表单,其中默认选中了几个复选框。当表单作为GET提交时,url将只包含保留选中状态的复选框列表 http://www.example.com/page/?checkbox1=yes&checkbox2=yes 在这种情况下,很难确定用户第一次到达此搜索页面与提交表单时所有复选框均未选中之间的差异,因为查询字符串看起来是相同的 为了解决这个问题,我已经开始在复选框前面注入一个隐藏字段,该字段具有相同的名称和一个“no”值。取消选中该复选框时,浏览器将发送隐藏字段的“否”值,设

我有一个搜索表单,其中默认选中了几个复选框。当表单作为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" />

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

解决实际问题:

确定用户首次到达此搜索页面与提交表单时未选中所有复选框之间的差异

有一个隐藏字段沿着

<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>

酒吧
巴兹

然后您可以在服务器上循环它们。如何做到这一点取决于服务器端环境。在大多数语言中,您可以调用一个返回数据数组的方法(IIRC Java form LIB通常采用这种方式),也可以在数组上下文中请求数据(Perl LIB通常采用这种方式)。PHP是服务器端编程的通用语言,有点奇怪,它要求您重命名字段,以字符结尾
[]

解决实际问题:

确定用户首次到达此搜索页面与提交表单时未选中所有复选框之间的差异

有一个隐藏字段沿着

<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>

酒吧
巴兹

然后您可以在服务器上循环它们。如何做到这一点取决于服务器端环境。在大多数语言中,您可以调用一个返回数据数组的方法(IIRC Java form LIB通常采用这种方式),也可以在数组上下文中请求数据(Perl LIB通常采用这种方式)。PHP是服务器端编程的通用语言,有点奇怪,它要求您重命名字段,以字符
[]

结尾,正如您所说,它似乎工作正常。或者,您可以避免使其像普通输入一样工作,只需检查输入是否存在(如果输入不存在,则将其视为false,如果存在,则将其视为true)

例如,在PHP中

如果(isset($_GET['checkbox1']){…}

在ASP.NET中

if(Request.QueryString[“checkbox1”!=null){…}


当然,您可能有自己的理由希望在客户端执行此操作。

正如您所说,它似乎工作正常。或者,您可以避免将其作为正常输入,只需检查输入是否存在(如果输入不存在,则将其视为假,如果存在,则将其视为真)

例如,在PHP中

如果(isset($_GET['checkbox1']){…}

在ASP.NET中

if(Request.QueryString[“checkbox1”!=null){…}


当然,您可能有自己的理由希望在客户端执行此操作。

这是一个非常聪明的想法。因为未选中的复选框不会出现在请求中,这将真正有助于了解用户是否首次输入表单

但是要知道,你可以简单地使用一个带有默认值的隐藏字段。因此,当用户输入表单时,该参数不会被设置。一旦用户提交表单,该值就会被设置

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

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


这能解决您的问题吗?

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

但是要知道,你可以简单地使用一个带有默认值的隐藏字段。因此,当用户输入表单时,该参数不会被设置。一旦用户提交表单,该值就会被设置

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

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


这能解决您的问题吗?

这不能解决问题:“确定用户首次到达此搜索页面与提交表单时未选中所有复选框之间的差异”谢谢。这只是另一种看待问题的方式。这不能解决问题中表达的问题:“确定用户第一次到达此搜索页面时与未选中所有复选框提交表单时的差异”谢谢。这只是另一种查看方式。仅当表单是使用“提交”按钮提交的(且仅当表单有值时)。如果表单是按enter键提交的,则不会提交表单(至少在某些浏览器中)或JavaScript。你对IE是正确的,因为他不发送提交值。我的第一个建议(无论如何更好)将解决这个问题:)仅当表单是使用提交按钮提交的(并且只有当表单有值时)。如果表单是通过enter键提交的(至少在某些浏览器中),它将不会被提交或者JavaScript。你对IE来说是对的,因为他没有发送提交值。我的第一个建议(无论如何更好)将解决这个问题:)