【问题标题】:Input checkbox only in order仅按顺序输入复选框
【发布时间】:2018-02-23 11:31:02
【问题描述】:

我正在寻找有关如何在输入复选框中设置选择规则的解决方案,该规则将允许选择 3 个元素,但只能以正确的顺序。

假设我们有几个复选框,例如 ch1、ch2、ch3、ch4、ch5、ch6。 用户只能标记三个,但只能一一标记。

ch1 + ch2 + ch3 - 没关系

ch3 + ch4 + ch5 - 没问题

ch2 + ch4 + ch5 - 不行

ch1 + ch2 + ch4 - 不行

我知道如何限制:

$('#Miesiac :checkbox').change(function () {
    var $checks=$(this).closest('#Miesiac').find(':checkbox:checked');
    if ($checks.length > 3) {
        this.checked=false;
    }
});

但是如何一一给出规则。你知道怎么做吗?

【问题讨论】:

  • 您的意思是用户最多只能连续检查 3 个 chx?前任。 1,2,3 还是 2,3,4?
  • 是的,没错
  • 一些想法:如果您只有几个复选框,请禁用除入口点(可以首先选择的那些)之外的所有复选框,然后使用一堆if elses 启用下一个可以是的复选框选择。如果你想做得好,设计一个有限状态机
  • 一个好主意。例如如果用户选择框#3,则仅保留#2和#4,其余的被关闭。那么如果用户选择#4,那么#5就会被包括在内,因为他仍然可以选择#2或#5……阿里谢谢你的帮助。

标签: javascript


【解决方案1】:

为复选框提供一个连续的 ID 或属性,就像您正在做的那样... ch1、ch2、ch3 等...

在更改事件中,您可以将此范围限制为当前正在选中/取消选中的复选框。从复选框的 this 解析 ID 或属性。

var theId = $(this).attr('id');

通过简单的字符串检查从该 id 字符串中解析复选框的编号。然后,您可以检查复选框的选中状态,在当前复选框的上方和下方增加一格。为了清楚起见,我让这段代码比需要的更冗长。

theId.replace('ch','');
theId++; //For one above
$('ch'+theId).checked;

$('ch'+theId).attr('checked');

现在你应该有上面一个的检查状态,如果它是无效的,你可以设置一个错误状态变量。对下面的一个做同样的事情,你可以从那里做任何验证中断、消息、页面事件拦截或任何你需要的事情。可能有 20 种不同的方法可以做到这一点,这是一个想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多