【问题标题】:Why do html checkboxes only transmit an 'on' value?为什么 html 复选框只传输“on”值?
【发布时间】:2011-05-14 17:44:50
【问题描述】:

我刚刚开始学习互联网编程。

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

为什么不同时发送一个“关闭”值?

【问题讨论】:

  • jQuery 如此愚蠢地处理这个问题。 $('<input type="checkbox" />').val() 给你"on"

标签: html checkbox


【解决方案1】:

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

而事实上,您知道由于它没有被发送而关闭 - 所以没有必要发送它。

【讨论】:

  • 我不同意这个答案。对开发人员(恕我直言)的好处将大大超过“通过网络”发送额外数据的成本。一方面,它极大地将您的 HTML 显示与处理页面耦合(我认为这是最大的论点)。其次,我会想象(这只是一个猜测)大多数页面只使用更合理数量的复选框,比如 10 个或更少,而这个数据量可以忽略不计。
  • 我也不同意。例如,如果使用GET 参数,则会出现三种状态。 ?checked=on?checked=off?。复选框可以显式打开或关闭,或者根本不设置。我想将“默认”设置为打开,但由于表单复选框的提交方式,不知道它是否关闭或未设置。这是一个愚蠢的问题,在我看来不应该以这种方式实现。
  • 我也不同意,你什么时候需要一个包含数千个复选框的页面?
【解决方案2】:

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

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

该 url 稍后将仅包含检查的值,并且看起来像:

order.php?toppings=mushrooms&toppings=onions&toppings=eggplant

如果同时发送“关闭”值,这将无法正常工作。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      默认状态为“未选中”(或按您的说明关闭),因此无需声明该信息。

      【讨论】:

      • 只是为了宣传@Damien的答案,如果默认选中,反之亦然。
      猜你喜欢
      • 2011-09-11
      • 2021-04-07
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多