2016-04-09 4 views
1

Ich habe eine Dauer von beispielsweise 3 Tagen und 7 Kontrollkästchen, die jeden Tag in einer Woche darstellen. Ich möchte in der Lage sein, einen Tag zu überprüfen, und dann die nächsten 2 Tage (3 Tage insgesamt) ausblenden.jQuery Anzahl der Tage berechnen und Kontrollkästchen ausblenden

enter image description here

Wenn wir eine Dauer von 3 Tagen betrachten: ich Montag prüfen, dann Mittwoch Dienstag & werden ausgeblendet. dann kann ich Donnerstag überprüfen, dann Freitag & Samstag versteckt werden:

enter image description here

Ich schrieb die folgende, die teilweise funktioniert:

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

Das Problem hier ist, wenn Sie Montag waren dann zu prüfen, Dienstag & Mittwoch wird versteckt sein, aber wenn Sie dann Samstag überprüfen, gibt es eine Kollision als Sonntag & Montag wird ausgeblendet werden, noch Dienstag & Mittwoch bleibt ausgeblendet:

enter image description here

Bitte sehen jsFiddle

Alle Zeiger in die richtige Richtung geschätzt

+0

Was passiert, wenn auf "Sun" geprüft wird? – ameenulla0007

+0

Was ist Ihr erwartetes Ergebnis? –

+0

Bei der Überprüfung Sonntag, gibt es eine Überschneidung von Montag (die bereits aktiviert ist), so ID wie Montag zu deaktivieren, und halten nur Montag, Dienstag versteckt – JPJens

Antwort

1

Ich mag Pablo Antwort. Ich denke, du solltest das stattdessen benutzen. Meine Lösung funktioniert aber ist ein bisschen dreckig. Hier ist es trotzdem: https://jsfiddle.net/ndaj4x3L/3/

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

EDIT: Der Grund, warum ich die Veränderung auslösen wieder, nachdem ich den Klick ausgelöst, weil aus irgendeinem Grund die Schleife beendet, nachdem die Funktion wieder läuft. Könnte etwas mit Variablennamen zu tun haben, die gleich oder ähnlich sind, ich bin mir nicht wirklich sicher, aber das sollte es trotzdem beheben.

+0

Erstaunlich. Genau das, wonach ich gesucht habe. So einfach;) Danke – JPJens

1

Vielleicht, wenn Sie auch die Vorschau Tage verstecken und deaktivieren Sie die versteckten Elemente eine gute Lösung sein könnte.

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

Verwandte Themen