2016-04-09 5 views
1

私は例えば3日間の期間を持ち、1週間に各日を表す7つのチェックボックスを持っています。 私はある日チェックし、次の2日間(合計3日間)隠すことができるようにしたい。jQueryは日数を計算し、チェックボックスを非表示にします

enter image description here

私たちは3日間の期間を検討している場合: を私は水曜日が非表示になります火曜日&そして、月曜日チェック。 木曜日チェック私は、その後、その後、金曜日&土曜日が隠されることができます。

enter image description here

私は部分的に動作し、以下の書いた:あなたは月曜日をチェックした場合、ここで問題がある

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++; 
    } 
} 
} 

を火曜日&水曜日は隠されますが、土曜日を確認すると、日曜日&月曜日が突然に非表示になりますが、火曜日の水曜日は&水曜日は非表示のままです:

enter image description here

プレビューの日にも隠して隠し要素は良い解決策になる可能性のチェックを外した場合に右方向にjsFiddle

を参照してください任意のポインタは、たぶん

+0

「太陽」のチェックボックスをオンにするとどうなりますか? – ameenulla0007

+0

あなたの期待どおりの結果は? –

+0

日曜日にチェックすると、monday(既にチェックされています)の重複がありますので、mondayのようにidをオフにして、月曜日のみ火曜日を隠します – JPJens

答えて

1

私はパブロの答えが好きです。代わりにそれを使うべきだと思います。私のソリューションは機能しますが、少し汚れています。ここでは、とにかくです:https://jsfiddle.net/ndaj4x3L/3/

if($('#check'+next).is(":checked")) { 
    $('#check'+next).trigger('click'); 
    $('#check'+next).hide(); 
    $('#check'+id).trigger('change'); 
} 

EDIT:関数が再び実行された後、何らかの理由でループが停止するので、私はクリックを誘発した後、私は再び変更をトリガ理由があります。変数名が同じか何かと何か関係がありますが、私は本当にわかりませんが、とにかくそれを修正する必要があります。

+0

素晴らしい。ちょうど私が探していたもの。だからシンプル;)ありがとう – JPJens

1

を高く評価しています。

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

example jsFiddle

関連する問題