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?