Anzahl der ausgewählten Elemente eines Listenfeldes bestimmen

Fragen und Antworten rund um das Thema JavaScript im LiveCycleDesigner
Antworten
Abtaucher
Beiträge: 14
Registriert: 30.07.2010, 11:53

Anzahl der ausgewählten Elemente eines Listenfeldes bestimmen

Beitrag von Abtaucher » 24.09.2010, 11:42

Hallo,

ist vielleicht ganz einfach, aber ich komme nicht drauf: gibt es eine Möglichkeit, wie man in einem Listenfeld mit mehrfacher Auswahl die Anzahl der tatsächlich ausgewählten items bestimmen kann, um sie dann im Skript zu verwerten?

Wäre schön, wenn jemand eine Idee hat. Vielen Dank schon mal!

Viele Grüße
Abtaucher

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

Anzahl der ausgewählten Elemente eines Listenfeldes bestimmen

Beitrag von nele_sonntag » 24.09.2010, 12:35

Hallo Abtaucher,

habe keine konkrete Lösung für Dich, aber vlt. kannst Du hiermit experimentieren.

Skript von Walde: http://acronaut.de/attachment.php?id=984 aus der Diskussion: http://acronaut.de/view_topic.php?id=1326&forum_id=34&highlight=Anhang+hinzuf%C3%BCgen

Hier werden zum einen:
- Anzahl der Listenelemente per Skript berechnet
- ausgewähltes Element kann angezeigt oder gelöscht werden per Skript

Dieser werden per

Code: Alles auswählen

Listenfeld1.selectedIndex
angesprochen. Und um den selektierten Index geht es ja bei Dir auch. Vielleicht kannst Du nun mit

Code: Alles auswählen

Listenfeld1.selectedIndex.all
oder einer anderen Methode diese zusammenzählen.

Habe leider selbst grad kein Zeit zum rumprobieren.

LG Mandy

Abtaucher
Beiträge: 14
Registriert: 30.07.2010, 11:53

Anzahl der ausgewählten Elemente eines Listenfeldes bestimmen

Beitrag von Abtaucher » 24.09.2010, 12:46

Hallo Mandy,

danke, ich schau's mir mal an. Vielleicht bringt's mich ein Stück weiter. Habe inzwischen versucht, das Problem zu umgehen, aber dabei stoße ich wieder an andere Probleme.

Viele Grüße

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

Anzahl der ausgewählten Elemente eines Listenfeldes bestimmen

Beitrag von nele_sonntag » 24.09.2010, 12:51

Was ist denn Dein anderer Lösungsansatz, vielleicht kann ich Dir hier eher helfen.

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

Anzahl der ausgewählten Elemente eines Listenfeldes bestimmen

Beitrag von nele_sonntag » 24.09.2010, 13:03

Wie wäre es hiermit?

Die Auswahl des Listenfeldes in ein verstecktes Feld schreiben: http://acronaut.de/attachment.php?id=957

Und bei diesem Feld einfach auszählen, siehe vorhin geposteter Link zur Anzahl der Anhänge aus dem Listenfeld mit

Code: Alles auswählen

Listenfeld1.items.nodes.length;
im calculate-Ereignis des berechneten Feldes.

LG Mandy

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

Anzahl der ausgewählten Elemente eines Listenfeldes bestimmen

Beitrag von nele_sonntag » 24.09.2010, 13:41

Hallo Abtaucher,

anbei ein Beispiel, welches zählt, wieviel Einträge man ausgewählt hat.
Bei Beispiel 2 habe ich einfach das zweite Listenfeld ausgeblendet.

Weiß gerade nicht, warum er Empty angibt, habe es auch ohne selectedIndes probiert, aber zumindest zählt er richtig.

LG Mandy

Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Anzahl der ausgewählten Elemente eines Listenfeldes bestimmen

Beitrag von nele_sonntag » 24.09.2010, 13:45

Vlt. hilft Dir dieses Skript von walde auch noch weiter.
Auswahl wird angezeigt und bei Bedarf wieder gelöscht mit Klick auf den Eintrag.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Abtaucher
Beiträge: 14
Registriert: 30.07.2010, 11:53

Anzahl der ausgewählten Elemente eines Listenfeldes bestimmen

Beitrag von Abtaucher » 24.09.2010, 13:59

Hallo Mandy,

mein Problem ist folgendes: ich sitze mal wieder (nach längerer Pause) an meinem Formular für den Studienplan. Ich habe je Modul eine Zeile mit einer checkbox, verschiedenen Text- und Numerischen Feldern. Ein Listenfeld wird mit Werten aus den Zeilen gefüllt, bei denen das Kontrollfeld nicht aktiviert ist. Soweit klappt das alles. Nun möchte ich mehrere Einträge im Listenfeld auswählen und beim Verlassen des Listenfeldes sollen die dazugehörigen Zeilen unter dem Listenfeld angezeigt werden. Dazu habe ich eine leere Zeile (Schwerpunktmodule1.Zeile) angelegt. Das Skript unten soll die ausgewählten Einträge abprüfen und bei jedem ausgewählten Eintrag, den es findet, eine leere Zeile einfügen und diese mit den Werten aus der Ursprungszeile füllen. (Vielleicht geht das ja auch viel einfacher, indem man die Ursprungszeile direkt an die Stelle kopiert, aber keine Ahnung, wie das funktioniert).

Das Skript unten funktioniert soweit, dass es die richtige Anzahl Zeilen einfügt und befüllt, ALLERDINGS nur mit den Werten des letzten ausgewählten Eintrags, dh. bei drei ausgewählten Einträgen schreibt es mir drei neue Zeilen mit jeweils dem Inhalt des dritten Eintrags.

Irgendwo habe ich einen Denkfehler, aber ich komme nicht drauf.

Code: Alles auswählen

  Formular1.Vertiefungsmodule.Schwerpunktmodule.Listenfeld1::exit - (JavaScript, client)

//das sind die Daten, aus denen sich die Einträge im Listenfeld ergeben
var fields1 = xfa.resolveNodes("Studienrichtung1.Zeile[*].Kontrollkaestchen1.[rawValue == 0]");

//Durchlaufe alle Einträge in der Liste
for (var i=0; i < fields1.length; i++) {
//Wenn ein Eintrag ausgewählt ist, ergänze eine Zeile im Teilformular "Schwerpunktmodule1" und...
if (this.getItemState(i)) {
    Schwerpunktmodule1.Zeile.instanceManager.addInstance(1);
    var Modulzeile = xfa.resolveNodes("Schwerpunktmodule1.Zeile[*]");
//Hier wird die Anzahl der eingefügten Zeilen abgefragt = Anzahl der selektierten Listeneinträge
    var f = Schwerpunktmodule1.Zeile.instanceManager.count-1;
//Hier sollen in der jeweiligen Zeile in den einzelnen Feldern die Daten aus den Feldern der Zeilen eingefügt werden, aus denen sich das Listenfeld zusammensetzt.    
    for (var p=0; p<f; p++) {
        Modulzeile.item(p).Textfeld1.rawValue = fields1.item(i).parent.Textfeld1.rawValue;
        Modulzeile.item(p).Textfeld2.rawValue = fields1.item(i).parent.Textfeld2.rawValue;
        Modulzeile.item(p).Textfeld3.rawValue = fields1.item(i).parent.Textfeld3.rawValue;
        Modulzeile.item(p).NumerischesFeld2.rawValue = fields1.item(i).parent.NumerischesFeld2.rawValue;
        Modulzeile.item(p).Textfeld4.rawValue = fields1.item(i).parent.Textfeld4.rawValue;
}}}

Antworten