Hallo,
ich habe es gleich mal in meinem PHP Code eingebaut.
Und siehe da, es funktioniert!
ich kann dir garnicht sagen wie sehr mich das freut.
Freut mich auch :-)
Ich muss aber zugeben, das ich nicht so ganz verstehe was jetzt anders ist.
Liegt es daran das wir nun das "new Option" erst am Schluss machen und nicht schon bei "group[]" ?
Ja. Das Multiple-Select-Element wird jetzt jedes mal mit nagelneuen Option-Elementen bestückt, die stets genau die Einstellungen erhalten, die ursprünglich mit den Parameter-Objekten festgelegt wurden.
In deinem ursprünglichen Code wurde dagegen immer mit den alten Option-Elementen weitergearbeitet, die sich ihren Zustand (selected oder nicht) jeweils gemerkt haben.
Diese Bezeichnungen bei;
{text:"Rot", value:"3", dflt:false, select:true}
also "text", "value", "dflt" und "select" können die frei wählbar sein?
Ja. Ich habe sie aber so benannt, weil daraus ihre Bedeuung für new Option() hervorgeht. Ein Option-Element hat ja Eigenschaften mit genau diesen Namen. Nur "default" habe ich abgekürzt zu "dflt", weil es in javascript ein reserviertes Wort ist (kann also nicht frei vergeben werden).
und was bedeuten die zwei !! bei
!!o.dflt,!!o.select
Falls "dflt" bzw. "select" im Parameter-Objekt nicht definiert sind (was ja vorkommt), dann würde man an new Option() die Werte "undefined" übergeben (vllt. nicht unbedingt schlimm, aber unschön).
!! ist eine doppelte Verneinung, weil !undefined === true bedeutet und daher !!undefined === false ist.
Also wird dadurch false übergeben, falls nicht definiert, und true wird übergeben, falls der Parameter bereits true ist (wegen !true === false und !!true === true).
Langer Rede kurzer Sinn: Durch !!wert
wird ein entsprechender boolescher wert (true/false
) erzwungen, es gilt z.B. (man beachte den typgenauen Vergleich mit ===
):
!!0 === false
!!"" === false
!!null === false
!!false === false
!!undefined === false
!!-1 === true
!!"text" === true
usw.
Viel Spass noch,
Don P