Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery计算天数并隐藏复选框_Javascript_Jquery - Fatal编程技术网

Javascript jQuery计算天数并隐藏复选框

Javascript jQuery计算天数并隐藏复选框,javascript,jquery,Javascript,Jquery,我有一个持续时间,例如3天,7个复选框代表一周中的每一天。 我希望能够检查一天,然后隐藏接下来的2天(总共3天) 如果我们考虑3天的持续时间: 我检查星期一,然后星期二和星期三将被隐藏。 然后我可以检查星期四,然后将隐藏星期五和星期六: 我写了以下部分工作: var toHide = new Array(0,0,0,0,0,0,0,0); $('.days').change(function() { var val = $(this).val(); var duration = $('#

我有一个持续时间,例如3天,7个复选框代表一周中的每一天。 我希望能够检查一天,然后隐藏接下来的2天(总共3天)

如果我们考虑3天的持续时间: 我检查星期一,然后星期二和星期三将被隐藏。 然后我可以检查星期四,然后将隐藏星期五和星期六:

我写了以下部分工作:

var toHide = new Array(0,0,0,0,0,0,0,0);
$('.days').change(function() {
 var val = $(this).val();
 var duration = $('#duration').val();
 if($('#check'+val).prop('checked')) {
    scheduleSelection(val,duration,'on');
 }else{
    scheduleSelection(val,duration,'off');
 }
});

function scheduleSelection(id,duration,mode) {
 var totalDays = duration;
 if(totalDays>1) {
  totalDays--;
    var next = parseInt(id)+1;
    for(i=1;i<=totalDays;i++) {
        if(next>7) { next = 1; }
        if(mode=='on') {
            toHide[next] = 1;
            $('#check'+next).hide();
        }else{
            toHide[next] = 0;
            $('#check'+next).show();
        }
        next++;
    }
 }
}
var-toHide=新数组(0,0,0,0,0,0,0);
$('.days').change(函数(){
var val=$(this.val();
var duration=$('#duration').val();
if($('#check'+val).prop('checked')){
日程选择(val,持续时间,'on');
}否则{
日程选择(val、持续时间、“关闭”);
}
});
功能计划选择(id、持续时间、模式){
var totalDays=持续时间;
如果(总天数>1){
总天数--;
var next=parseInt(id)+1;
对于(i=1;i7){next=1;}
如果(模式=='on'){
toHide[next]=1;
$('#选中'+下一步).hide();
}否则{
toHide[next]=0;
$(“#选中“+下一步).show();
}
next++;
}
}
}
这里的问题是,如果您要检查星期一,那么星期二和星期三将被隐藏,但是如果您随后检查星期六,则会发生冲突,因为星期天和星期一将被隐藏,而星期二和星期三将保持隐藏:

请参见


任何指向正确方向的指针都很受欢迎

如果您同时隐藏预览日并取消选中隐藏元素,可能是一个很好的解决方案

function scheduleSelection(id,duration,mode) {
//var oneDay = 86400;
var totalDays = duration;

if(totalDays>1) {
    totalDays--;
    var next = parseInt(id)+1;
    var prev = parseInt(id)-1;
    for(i=1;i<=totalDays;i++) {
        if(next>7) { next = 1; }
        if(prev<1) { prev = 7; }
        if(mode=='on') {
            toHide[next] = 1;
            toHide[prev] = 1
            $('#check'+next).hide();
            $('#check'+next).attr("checked",false);
            $('#check'+prev).hide();
            $('#check'+prev).attr("checked",false);
        }else{
            toHide[next] = 0;
            toHide[prev] = 0;
            $('#check'+prev).show();
            $('#check'+next).show();
        }
        next++;
        prev--;
    }
  }
}
功能计划选择(id、持续时间、模式){
//var一天=86400;
var totalDays=持续时间;
如果(总天数>1){
总天数--;
var next=parseInt(id)+1;
var-prev=parseInt(id)-1;
对于(i=1;i7){next=1;}

如果(prev我喜欢巴勃罗的答案。我想你应该用它来代替。我的解决方案有效,但有点脏。不管怎样,它是这样的:


编辑:我触发单击后再次触发更改的原因是由于某种原因,循环在函数再次运行后停止。可能与变量名相同或其他原因有关,我不确定,但这应该可以解决问题。

Sun
上选中时会发生什么情况?您期望的分辨率是多少ult?检查星期日时,与星期一重叠(已检查),所以我希望星期一取消选中,只保留星期一、星期二hidden@Sandersen在您的文本框中,值为3,但隐藏复选框为2,这是必需的功能吗?@ameenulla0007想法是,选中的日期包含在天数中,这就是为什么我从totalDays中删除1。太棒了。这正是我要找的。所以谢谢
if($('#check'+next).is(":checked")) {
    $('#check'+next).trigger('click');
    $('#check'+next).hide();
    $('#check'+id).trigger('change');
}