【问题标题】:validate whether continuous weekdays checkbox are checked验证是否选中连续工作日复选框
【发布时间】:2013-05-08 06:23:39
【问题描述】:

我有像下面这样的复选框,显示一周中的所有日子。

复选框的值分别为1、2、3、4、5、6、7。

我需要在 javascript 中有一个验证逻辑来​​验证用户是否点击了连续天数的复选框。连续天数可以从任何一天开始。喜欢,

周三、周四、周五、周六、周日 (4,5,6,7,1)

周一、周二、周三、周四、周五、周六(2,3,4,5,6,7)

周六、周日、周一、周二、周三、周四(7,1,2,3,4,5)

周二、周三、周四、周五、周六、周日(3,4,5,6,7,1) 等等

应选择至少 5 天。不应允许用户选择如下示例:

周六、周日、周一、周三、周四(7,1,2,4,5)

周一、周三、周四、周五、周六(2,4,5,6,7)

周二、周四、周五、周六、周日(3,5,6,7,1)

有没有办法在 javascript/jquery 中处理这个验证?

【问题讨论】:

  • 可以分享checkbox的html吗

标签: javascript jquery validation


【解决方案1】:

如果您可以将选定的值放入数组中,那么

function test(values){

    if(values.length !=5 ){
        return false;
    }

    var expected = values[0], valid = true;
    $.each(values, function(i, v){
        if( expected != v){
            valid = false;
            return false;
        }
        expected  = v == 7 ? 1 : v + 1;
    })

    if(!valid){
        return false;
    }

    return true;
}

演示:Fiddle

【讨论】:

  • 感谢@Arun 这个简单而合乎逻辑的答案。您的解决方案工作正常。但是填充数组让我很困扰。如果我们选择 sun、wed、thur、fri、sat(这是正确的顺序)并且如果我们使用 $.each 它将返回 1,4,5,6,7 而不是 4,5,6,7,1。那么这个解决方案将不起作用。有没有办法根据需要使用 $.each 填充数组?
【解决方案2】:
 function checkboxlimit(checkgroup, limit){
var checkgroup=checkgroup
var limit=limit
for (var i=0; i<checkgroup.length; i++){
    checkgroup[i].onclick=function(){
    var checkedcount=0
    for (var i=0; i<checkgroup.length; i++)
        checkedcount+=(checkgroup[i].checked)? 1 : 0
    if (checkedcount>limit){
        alert("You can only select a maximum of "+limit+" checkboxes")
        this.checked=false
        }
    }
}
 }

在正文部分添加这个

  checkboxlimit(document.forms.world.countries, 2) // here 2 states to select only two check box

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 2017-06-07
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 2022-11-02
    • 1970-01-01
    • 2014-10-29
    相关资源
    最近更新 更多