为什么html复选框只传输';在';价值

为什么html复选框只传输';在';价值,html,checkbox,Html,Checkbox,我刚开始学习网络编程 在使用复选框之后,我发现了一个困难的方法,即只有选中复选框时,它才会传输一个“开”值 为什么不同时发送一个“off”值呢?默认状态为“unchecked”(或按您的状态为off),因此无需声明该信息。我认为这一定是为了传输的简洁。向服务器发送的每个请求都是“通过线路”发送的。如果您的页面上有数千个复选框,您会发现告知服务器“此框已关闭”的数据量实际上相当大(看看你必须如何发送每个复选框元素的名称——这可能会增加多达兆字节的信息——这会降低整个用户体验和互联网速度) 事实上,

我刚开始学习网络编程

在使用复选框之后,我发现了一个困难的方法,即只有选中复选框时,它才会传输一个“开”值


为什么不同时发送一个“off”值呢?

默认状态为“unchecked”(或按您的状态为off),因此无需声明该信息。

我认为这一定是为了传输的简洁。向服务器发送的每个请求都是“通过线路”发送的。如果您的页面上有数千个复选框,您会发现告知服务器“此框已关闭”的数据量实际上相当大(看看你必须如何发送每个复选框元素的名称——这可能会增加多达兆字节的信息——这会降低整个用户体验和互联网速度)


事实上,您知道它是关闭的,因为它没有被发送,所以没有必要发送它。

作为布尔值的典型值,它被假定为关闭。检查它很简单,但是,这取决于您选择的语言。使用PHP作为演示,您可以检查:

$myvar_enabled = (isset($_GET['myvar']) && $_GET['myvar'] == 'on');

可以有许多具有相同元素名称的复选框:

<form action="order.php" method="get">

  <p>
    <label><input type="checkbox" name="toppings" value="olives"/>Olives</label>
    <label><input type="checkbox" name="toppings" value="mushrooms"/>Mushrooms</label>
    <label><input type="checkbox" name="toppings" value="onions"/>Onions</label>
    <label><input type="checkbox" name="toppings" value="eggplant"/>Eggplant</label>
    etc...
  </p>

  <p><input type="submit" value="Submit"/></p>

</form>

如果同时发送一个“off”值,那么这将不会很好地工作。

就ad@Damien的回答而言,如果默认选中它,反过来也可能是正确的。我不同意这个回答。对开发者的好处(imho)这将大大超过“通过网络”发送额外数据的成本。首先,它将HTML显示与处理页面(我认为这是最大的争论点)极大地结合起来。其次,我可以想象(这只是一个猜测)大多数页面只使用了更合理数量的复选框,比如说10个或更少,而这个数量的数据可以忽略不计。我也不同意。例如,如果使用
GET
参数,有三种状态。
?checked=on
?checked=off
。复选框可以显式打开或关闭,也可以根本不设置。我想将“默认”设置为打开,但不知道它是否关闭或未设置,因为表单复选框的提交方式。我认为这是一个愚蠢的问题,不应该以这种方式实现。我也不同意,你什么时候需要一个包含数千个复选框的页面?jQuery处理这个问题的方式非常愚蠢。
$(“”).val()。
order.php?toppings=mushrooms&toppings=onions&toppings=eggplant