Anzahl Teilformulare in einem Teilformular (Javascript)

Grundsätzliche Themen zur Bedienung, Erstellung von Formularen, Datenbankanbindung und Beispiele ...
Antworten
Einheizer
Beiträge: 22
Registriert: 07.01.2014, 11:03

Anzahl Teilformulare in einem Teilformular (Javascript)

Beitrag von Einheizer » 09.11.2014, 22:37

Hallo zusammen,

ich brauche mal wieder eure Hilfe.

Kann ich mir mit einem Javascript die Anzahl, Index oder den Namen aller Teilformulare ausgeben, die sich in einem umschließenden Teilformular befinden?

Beispiel:
- Teilformular1
   - Teilformular1.1
   - Teilformular1.2
   - Teilformular1.3

Bei "xfa.resolveNodes("Subform[ * ]").length;"  erhalte ich eine Länge von 1, obwohl mehrere Teilformulare da drunter sind.
[*]
Der Sinn dahinter ist, dass ich mir den Index aus einem DropDown-Objekt lese und damit dann z.B. Teilformular1.2 einblenden und alle anderen ausblenden will.


Gruß Einheizer
[/*]

Benutzeravatar
nele_sonntag
Beiträge: 2742
Registriert: 04.05.2009, 15:12
Wohnort: Frankfurt
Kontaktdaten:

Anzahl Teilformulare in einem Teilformular (Javascript)

Beitrag von nele_sonntag » 09.11.2014, 23:07

Hej Einheizer,

das einfachste ist, du legst eine If-Abfrage in das calculate der Subform selbst und sagst, blende dich ein/aus, wenn derund der Index aus dem DD ausgewählt wurde.

Das ist einfach, effizient und es kann dir egal sein, wie es anzusprechen wäre.

LG Mandy

Einheizer
Beiträge: 22
Registriert: 07.01.2014, 11:03

Anzahl Teilformulare in einem Teilformular (Javascript)

Beitrag von Einheizer » 09.11.2014, 23:32

Hallo Nele,

Vielen Dank für deine schnelle Antwort,
aber ich will, dass dann alle anderen Teilformulare ausgeblendet werden. Dann müsste ich ja zu jedem Teilformular eine if-else Abfrage machen und das sind einige. Meine Idee war, dass ich ähnlich wie in einer Tabelle durchlaufe, den Wert mit dem Teilformular-Index überprüfe und dann entweder ein oder ausblende. Damit würde ich mir viel Schreibarbeit ersparen und beim Einfügen eines neuen Teinformulars, müsste ich nichts am Coding ändern.
13 if-else Anweisungen sehen etwas unschön aus, aber wenn es nicht anders geht, muss ich die wohl machen.

armine
Beiträge: 2690
Registriert: 16.05.2009, 10:24

Anzahl Teilformulare in einem Teilformular (Javascript)

Beitrag von armine » 10.11.2014, 08:24

Hallo Einheizer,

z.B. Teilformular1.2 einblenden und alle anderen ausblenden? Dann mach’s in der umgekehrten Abfolge: Alle ausblenden und dann das "eine" einblenden.

vg armine

Einheizer
Beiträge: 22
Registriert: 07.01.2014, 11:03

Anzahl Teilformulare in einem Teilformular (Javascript)

Beitrag von Einheizer » 10.11.2014, 12:09

Hallo Armine,


danke, das ist mir schon klar. Ist aber unschön und nervig bei Änderugen, da ich dann immer den Code ändern muss.
 
Nach Neles Beschreibung (1 bis n Teilformulare):


function formVisibility (i_index){
  if (index == 1)
    TF_1_1.presence = "visible";
  else
   TF_1_1.presence = "hidden";
  ....
  ....
  if (index == n)
    TF_1_n.presence = "visible";

  else
   TF_1_n.presence = "hidden";
 

}

 




Wäre es so aber nicht schöner und eleganter (1 bis n Teilformualre):


Function formVisibility (i_index){
   o_forms = "Alle Teilformulare unter TF1";
   o_formsLength = o_forms.length;



   for(i = 0; i < oformsLength; i++){
if (i_index == i)
"Teilformulare mit dem Index i  "  .presence = "visible";
Else
"Teilformulare mit dem Index i"   .presence = "hidden";
 
 
   }
}




Mir fehlt im Script das Fett geschriebene. Ich komme nicht drauf, wie ich alle child Teilformualre (Subforms) auslesen kann, die sich genau nur unter einem Teilformular befinden. 


Greetz Einheizer




Benutzeravatar
radzmar
Beiträge: 962
Registriert: 26.10.2011, 10:18

Anzahl Teilformulare in einem Teilformular (Javascript)

Beitrag von radzmar » 10.11.2014, 12:55

Also deine Beschreibung ist leider nicht eindeutig.
Wenn Du jedes Teilformular individuell benennst, dann hast Du auch immer nur 1 Instanz eines jeden Teilformulars vorliegen.
Darum liefert die resolveNodes() auch nur 1 zurück.

Ich hätte nun 2 Lösungen:
1. Für mehrere individuell benannte Teilformulare.

Code: Alles auswählen

var aSubforms = [],
	vTarget = xfa.resolveNode("Formular1.#subform.Teilformular1"),
	vIndex = parseInt(DropdownListe1.rawValue) - 1;
	
function findSubforms (vNode, sTargetName, aSubforms) { 
    if (vNode.className === "subform" && vNode.parent.name === sTargetName) {
        aSubforms.push(vNode);
    } 
    for (var i = 0; i < vNode.nodes.length; i++) {
        findSubforms (vNode.nodes.item(i), sTargetName, aSubforms);
    }
} 

findSubforms (vTarget, vTarget.name, aSubforms);

aSubforms.forEach( function (element, index) {
	element.presence = index === vIndex ? "visible" : "hidden";
});

2. Für mehrere identisch benannte Teilformulare.

Code: Alles auswählen

var aSubforms = xfa.resolveNodes("Formular1.#subform.Teilformular2.Teilformular[*]"),
	vIndex = parseInt(DropdownListe1.rawValue) - 1;

for (var i = 0, j = aSubforms.length; i < j; i += 1) {
	aSubforms.item(i).presence = i === vIndex ? "visible" : "hidden";
}
Wie das Ganze funktioniert, siehst Du in der Datei anbei.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Einheizer
Beiträge: 22
Registriert: 07.01.2014, 11:03

Anzahl Teilformulare in einem Teilformular (Javascript)

Beitrag von Einheizer » 10.11.2014, 13:08

Hallo radzma,

vielen Dank. Ich hatte vergessen alle Teilformulare identisch zu bennen.

Greetz Einheizer

Antworten