【问题标题】:When should I use a checkbox value that is not a binary (1 or 0) value? [closed]何时应该使用不是二进制(1 或 0)值的复选框值? [关闭]
【发布时间】:2013-01-07 09:37:39
【问题描述】:

我在互联网上看到很多人在 stackoverflow 上,我的同事在他们的复选框中使用的值不是 1 或 0(例如 <input type='checkbox' value='check'/>),但我的想法是基本上一个复选框将始终是肯定的/没有回答。

目前我使用我编写的 jQuery 脚本来标准化我的应用程序,如下所示:

;(function($){
    $(document).ready(function() {
        var selector = 'input[type="checkbox"]';
        var c = 'checked';
        $.each($(selector),function(){
            var $el,value,attr;
            $el = $(this);
            value = $el.val();
            attr = $el.attr(c);
            if(value == 1 || typeof(attr) !== 'undefined')
            {
                $el.attr(c,c);
                $el.prop(c,true);
                $el.val(1);
            }
            else{
                $el.removeAttr(c);
                $el.prop(c,false);
                $el.val(0);
            }
        });
        $(selector).change(function(e){
            var $el, checked = null;
            $el = $(this);
            checked = $el.prop(c);
            if (checked) {
                $el.attr(c,c);
                $el.val(1);
            } else {
                $el.removeAttr(c);
                $el.val(0);
            }
        });
    });
})(jQuery);

这样我就可以处理以下任何一种情况:

<input type='checkbox' value='1'/>
<input type='checkbox' checked/>
<input type='checkbox' checked='checked'/>
<input type='checkbox' value='1' disabled/>
<input type='checkbox' checked disabled/>
<input type='checkbox' checked='checked' disabled/>
<input type='checkbox' value='0'/>
<input type='checkbox'/>
<input type='checkbox' value='0' disabled/>
<input type='checkbox' disabled/>

但它不考虑任何不是 0 或 1 或具有“已选中”属性的复选框的值。

我的问题是:是否有使用非 0/null 或 1 值的好用例(尤其是在使用关系数据库时)?

【问题讨论】:

  • "select all that apply" [ ] yes [ ] no [ ] file not found。仅仅因为你想不出任何非y/n场景并不意味着它们不存在。
  • @MarcB 为此,我将使用在相关表上创建 3 列,并根据是否检查它在每个列中插入一个二进制值。如果选项数量不定,我会使用联结表。
  • 还要考虑 NULL 可以用于复选框行为。

标签: php jquery html mysql checkbox


【解决方案1】:

考虑以下内容:“选择您最喜欢的水果(勾选所有适用项)”。

你的方法:

<input type="checkbox" name="choice_apple" value="1" />
<input type="checkbox" name="choice_orange" value="1" />
<input type="checkbox" name="choice_durian" value="1" />

或者你可以使用类似的东西:

<input type="checkbox" name="choice[]" value="apple" />
<input type="checkbox" name="choice[]" value="orange" />
<input type="checkbox" name="choice[]" value="durian" />

后端存储系统与此无关。我们只是在谈论复选框。您的方法需要 3 个单独的表单字段名称,名称中嵌入了选项的“值”。提取该名称需要额外的开销,以便您可以将水果的名称实际存储在某处。

然而,对于“有用的价值”版本,它是一个单一的表单字段。 PHP 会将选项转换为数组 - 最终您将获得所需的确切名称,而无需额外的任何提取/处理。

记住:未选中的复选框与普通表单提交一起提交。那里已经有一个隐含的真/假。如果您在服务器上获得复选框的字段名称,则该复选框被选中。

既然你已经有了一个很好的内置真/假,为什么不增加额外的语义来说明真/假代表什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2023-03-02
    • 2013-11-16
    • 2021-07-06
    • 2014-04-17
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多