Jag har stött på patrull när jag försöker göra ett gränssnitt för att skicka ut mail till enskilda mottagare/grupper.
Tanken är denna: Användaren ska kunna skapa mottagare och även kunna koppla dessa till grupper. Ex: Jag skapar mottagarna A, B, C och D, och även två grupper kallade X och Y. A och B skall tillhöra gruppen X, och A och C skall tillhöra gruppen Y. D tillhör inte någon grupp.
Jag tänkte då att man på ett enkelt sätt ska kunna skicka meddelanden till dessa mottagare genom att markera kryssrutor i ett formulär, ungefär som nedan
[ ][b]X[/b]
[ ] A
[ ] B
[ ][b]Y[/b]
[ ] A
[ ] C
[b]Ingen grupp[/b]
[ ] D
Om jag nu markerar kryssrutan bredvid gruppen X så skall samtliga medlemmar i den gruppen markeras, detta har jag löst. Men, eftersom A även är medlem i gruppen Y så vill jag ju att även den kryssrutan skall markeras (och tar jag bort markeringen på någon av kryssrutorna tillhörande A så ska samtliga "A-rutor" avmarkeras), och här kommer mitt problem. Jag har lyckats göra så att samtliga medlemmar i gruppen X markeras när jag markerar kryssrutan X, och jag har även lyckats göra så att samtliga A-rutor markeras/avmarkeras när jag trycker i kryssrutan A. Däremot har jag inte lyckats göra så att A-rutan under Y markeras när jag markerar gruppen X, och har ingen aning om hur koden för det skulle se ut. Oj, vad snurrigt det här blev nu. Hoppas någon förstår
Och så lite kod för att förhoppningsvis underlätta förståelsen:
$(":checkbox[name=rec_group]").change(function() {
var value = this.checked;
$(this).parent().find(".group :checkbox").attr("checked", value ).each(function() {
$("[value="+this.value+"]").attr("checked", value );
});
});
Nej, inte riktigt, men det kanske är ett steg i rätt riktning.
Med den koden blir samtliga grupper valda. Dvs, väljer jag grupp X blir även grupp Y vald. Det jag vill är att när jag väljer grupp X så ska A och B också väljas, men även A under Y (eftersom A ingår i både X och Y). Y och C ska däremot inte vara valda.
Edit:
Jag hade dessutom ett fel i min lokala kod. Det enda felet nu är att gruppen Y väljs. A väljs alltså i båda grupperna, och C är fortfarande inte ikryssad. Men detta kanske jag kan lösa själv. Ska testa en sak.
Ditt förslag ledde mig i rätt riktning.
Följande kod fungerar för mig:
$(":checkbox[name='rec_group']").change(function() {
var value = this.checked;
$(this).parent().find(".group :checkbox").each(function() {
$("[name='rec[]'][value="+this.value+"]").attr("checked", value );
});
});
Ditt förslag ledde mig i rätt riktning.
Följande kod fungerar för mig:
$(":checkbox[name='rec_group']").change(function() {
var value = this.checked;
$(this).parent().find(".group :checkbox").each(function() {
$("[name='rec[]'][value="+this.value+"]").attr("checked", value );
});
});
Fast skall du inte om du kryssa i "A" så skall alla "A" markeras?
Nej, det förstå jag med, men du har inte bundit A,B,C eller D till något, och snälla: ANVÄND INTE CLICK eventet på en checkbox
var checkState = function() {
var groupCheckboxes = $(this).parent().find(".group").find(":checkbox");
allChecked = groupCheckboxes.length === groupCheckboxes.filter(":checked").length;
$(this).attr("checked", allChecked);
};
var allRec = $(":checkbox[name='rec[]']").bind("change",function() {
allRec.filter("[value="+this.value+"]").attr("checked", this.checked).parent().parent().closest("li").find(":checkbox:first").trigger("change.checkState");
});
var groups = $(":checkbox[name='rec_group']").bind("change", function() {
$(this).parent().find(".group :checkbox").attr("checked", this.checked).trigger("change");
}).bind("change.checkState", checkState);
Känns som detta är lite mer normalt beteende, om jag kryssar i A och B så borde ju gruppen bli markerad att jag har markerat allt i den gruppen, eller?