37414
Goto Top

Jahr automatisch aktualisieren per Javascript

Ich habe in einem ausfüllbaren PDF-Dokument, welches ich mit "Adobe XI Pro" erstellt habe, ein Dropdownfeld, wo eine Jahreszahl ausgewählt werden muss.

Die Jahre gehen zurück bis 1985 und es soll eben immer ein Jahr - einschließlich des gerade aktuellen Jahres - ausgewählt werden können.
Ab dem jeweils 1. Januar müßte dann also automatisch oben zusätzlich die neue, aktuelle Jahreszahl erscheinen.

Ich habe bereits herausgefunden, dass man mit Javascript das jeweils aktuelle Jahr über den folgenden Code erhält:
(new Date()).getFullYear()

Man kann in den Eigenschaften des Dropdownfeldes über den Reiter "Aktionen" die Auswahl "Javascript ausführen" wählen und somit JS-Code ausführen lassen oder aber über den Reiter "Berechnung" ein benutzerdefiniertes Berechnungsscript eingeben.

Meine Beispieldatei habe mal unten angehangen.

Falls Ihr Adobe XI Pro nutzt, könnt Ihr Euch die Eigenschaften des Feldes ja mal anschauen und ggf. den Code einfach mal darin austesten. Ich habe leider keine Möglichkeit gefunden, mit der es funktioniert. Ich nehme an, dass man über die Feldeigenschaften ja irgendwie noch angeben muss, wann und wo der obige JS-Code ausgeführt werden soll, damit es am Ende auch funktioniert.

Wäre schön, wenn Ihr mir hier nochmal weiterhelfen könntet.

Danke und schönen Gruß,
imebro

Content-Key: 465688

Url: https://administrator.de/contentid/465688

Printed on: April 19, 2024 at 02:04 o'clock

Member: colinardo
colinardo Jun 25, 2019 updated at 08:00:22 (UTC)
Goto Top
Servus,
bitte sehr dropdown_date_465688.pdf .

Grüße Uwe
Member: ashnod
ashnod Jun 25, 2019 at 08:02:41 (UTC)
Goto Top
Moin ...

musst du schon sagen was da passieren soll ... da kommt JS hin und ist nur bedingt auf das Feld bezogen ...

Im Dropdown wird das noch matschiger ...

Im Prinzip bekommste die Jahreszahl mit

this.getField("Feldname").value=(new Date()).getFullYear();  

sofern dein oben angegebener Funktionsaufruf (Datum passt) hab ich nicht probiert und nicht im Kopf ...

VG
Mitglied: 37414
37414 Jun 25, 2019 at 08:43:47 (UTC)
Goto Top
Zunächst danke für die schnellen Antworten.

@ ashnod:
Wo in den Eigenschaften muss ich Deinen Code eintragen?

In den Eigenschaften unter "Aktionen" habe ich jetzt mal über die Auswahl "Feld aktivieren" und "Javascript hinzufügen" den Code eingetragen.
In den Optionen habe ich mal testweise die Jahre 2017 und 2018 eingesetzt.
Aber leider erscheint beim Aufruf der Datei und Auswahl einer Jahreszahl nicht die 2019.

LG
imebro
Member: colinardo
colinardo Jun 25, 2019 updated at 09:00:02 (UTC)
Goto Top
Aber leider erscheint beim Aufruf der Datei und Auswahl einer Jahreszahl nicht die 2019.
Kann ja auch nicht funktionieren wenn man sich die API mal ansehen würde, funktionsfähigen Code findest du im fertigen PDF oben.
Mitglied: 37414
37414 Jun 25, 2019 at 09:16:57 (UTC)
Goto Top
@ colinardo:

Ich danke Dir zunächst für die Mühe und Deine schnellen Antworten.

Um ehrlich zu sein, ist es einfach so, dass ich nicht bereit bin, für die Hilfe in einem offenen Userforum Geld zu zahlen.
Ich bin in vielen unterschiedlichen Foren unterwegs... und das seit sehr vielen Jahren.
Jedoch fällt mir hauptsächlich hier im Admin-Forum seit längerer Zeit auf, dass oftmals Hilfe nur noch gegen die Zahlung von Geld angeboten wird.

Selbstverständlich habe ich nichts dagegen, dass fähige Admins für ihre Leistung auch bezahlt werden... das wollen wir alle.
Aber das hier ist ein Userforum und keine Geschäfts-Webseite. Bei Letzterer weiß man schon dann, wenn man eine Frage stellt, dass die Antwort nur über die Zahlung von Geld für die erbrachte Leistung gegeben wird. Wende ich mich aber an ein Userforum, dann gehe ich nicht davon aus, dass ich für die dort angebotene Hilfe Geld zahlen muss.

Und um es offen zu sagen, finde ich das so auch nicht in Ordnung.
Geldforderungen haben m.E. in einem Userforum nichts verloren.

Dennoch vielen Dank und schöne Grüße,
imebro
Member: colinardo
colinardo Jun 25, 2019 updated at 09:54:07 (UTC)
Goto Top
Tja wenn man noch nicht mal bereit ist den Leuten hier bei der Hitze ab und zu ein wirklich "kleines" Bier zu spendieren, na dann ... du musst ja nicht, es gibt genug Leute die es honorieren.
Wie du in meinen Beiträgen sehen kannst biete ich hier überwiegend jede Menge Code für keinen Cent. Wenn ich aber sehe das von einem User damit offensichtlich kommerziell/geschäftlich genutzte Dokumente damit erstellt werden und dieser hier immer wieder mit sowas auftaucht und das Forum für seine Zwecke missbraucht und selbst nichts dazu beiträgt, landen diese eben auf meiner schwarzen Liste.

Naja beschäftige dich mal hiermit:
var dd = event.target;
var min = 1985;
var max = (new Date()).getFullYear();
if (dd.getItemAt(0) != max){
    dd.clearItems();
    for(i = min; i <= max;i++){
      dd.insertItemAt(i,i,0);
    }
}
Ciao.
Mitglied: 37414
37414 Jun 25, 2019 at 10:08:30 (UTC)
Goto Top
Danke Dir...

Meist ist das jedoch nicht kommerziell genutzt. Und wenn, dann tust Du es sogar für einen wirklich guten Zweck, denn wir arbeiten hier für Menschen, die eine schlimme Krankheit haben und daher weit unter Sozialhilfeniveau leben müssen und dazu auch noch heftig stigmatisiert werden. Wir bekommen keine staatlichen Fördermittel und müssen für die Hilfe dieser Menschen alle Gelder selbst einwerben, was mehr als schwer ist.

Nun gut...

Danke für den Code.
Dann ging ja meine ursprüngliche Vermutung mit dem Codeteil "(new Date()).getFullYear()" auf jeden Fall schon mal in die richtige Richtung.

Ich habe Deinen Code jetzt in "Eigenschaften / Aktionen" eingetragen als "Javascript ausführen".
Das funktioniert auch so. Allerdings erscheinen die Jahreszahlen erst dann, wenn ich 1 x Enter im Dropdownfeld gedrückt habe.

Vielleicht habe ich im Reiter "Aktionen" noch eine falsche Auswahl getroffen.

Ich habe
- bei "Auslöser wählen" = "Maustaste loslassen" gewählt
- unten bei "Aktionen" steht nun "Maustaste loslassen" und darunter "Javascript ausführen" und im JS dann Dein Code.

LG
imebro
Mitglied: 37414
37414 Jun 25, 2019 at 10:13:19 (UTC)
Goto Top
...glaube ich habe es jetzt herausgefunden.

Habe statt "Maustaste loslassen" jetzt "Feld aktivieren" genommen und so funktionierte es eben.

Wäre das die richtige Variante?

LG
imebro
Mitglied: 37414
37414 Jun 27, 2019 updated at 06:11:49 (UTC)
Goto Top
@ colinardo:

Mal noch eine kurze Frage zu diesem Thread:

Kann man eigentlich zu den Jahreszahlen - und zwar über der aktuellen Jahreszahl - noch ein "unbekannt" mit eingeben mit dem obigen Code?
Denn für manche Personen ist die auszuwählende Jahreszahl nicht bekannt.

Danke und Gruß,
imebro
Member: colinardo
colinardo Jun 27, 2019 at 06:13:59 (UTC)
Goto Top
var dd = event.target;
var min = 1985;
var max = (new Date()).getFullYear();
if (dd.getItemAt(1) != max){
    dd.clearItems();
    for(i = min; i <= max;i++){
      dd.insertItemAt(i,i,0);
    }
    dd.insertItemAt("Unbekannt","Unbekannt",0);  
}
Mitglied: 37414
37414 Jun 27, 2019 at 06:27:44 (UTC)
Goto Top
wow... das ging ja schnell.
Dann muss ich den Code ja nur minimal abändern in der vorletzten Zeile.

Danke und Gruß,
imebro
Mitglied: 37414
37414 Jun 27, 2019 updated at 06:45:20 (UTC)
Goto Top
Ich habe ein ">" Zeichen über die Optionen in die Elementliste eingesetzt, da dieses dort immer bei Aufruf der Datei erscheinen soll.
Das funktioniert auch.

Aber sobald man jetzt einmal das Dropdownfeld geöffnet hat und es wieder verläßt, ohne ein Jahr oder "unbekannt" auszuwählen, erscheint das ">" Zeichen nicht mehr, sondern jetzt steht dort automatisch der oberste Eintrag (jetzt halt "unbekannt").

Daher wollte ich das ">" Zeichen jetzt zusätzlich über Deinen Code einsetzen, erhalte aber eine Fehlermeldung.

Syntax Error 12: in Zeile 13

So habe ich es versucht:

var dd = event.target;
var min = 1985;
var max = (new Date()).getFullYear();
if (dd.getItemAt(0) != max){
    dd.clearItems();
    for(i = min; i <= max;i++){
      dd.insertItemAt(i,i,0);
    }
     dd.insertItemAt(">",">",0);  
    }
     dd.insertItemAt("Unbekannt","Unbekannt",0);  
}

Kann man offenbar doch nicht einfach so erweitern face-wink

Gruß
imebro


P.S.:

Könnte sein, dass ich das Problem gefunden habe.

Habe es jetzt mal so eingegeben:

var dd = event.target;
var min = 1985;
var max = (new Date()).getFullYear();
if (dd.getItemAt(0) != max){
    dd.clearItems();
    for(i = min; i <= max;i++){
      dd.insertItemAt(i,i,0);
    }
     dd.insertItemAt(">",">",0);  
     dd.insertItemAt("Unbekannt","Unbekannt",0);  
}

Die beiden dd.insert direkt hintereinander und ohne }

Gruß
imebro
Mitglied: 37414
37414 Jun 27, 2019 updated at 06:52:55 (UTC)
Goto Top
...funktioniert face-smile

Habe jetzt nur die Plätze getauscht und zuerst "unbekannt" eingesetzt und danach das ">" Zeichen.
Jetzt bleibt das Zeichen auch automatisch stehen, wenn man KEINE Auswahl trifft. So sollte es sein... Perfekt! face-wink

Gruß
imebro
Member: colinardo
colinardo Jun 27, 2019 updated at 07:00:59 (UTC)
Goto Top
Dann muss ich den Code ja nur minimal abändern in der vorletzten Zeile.
Nö, du hast den Code falsch übernommen ... schau mal ganz genau hin.
Mitglied: 37414
37414 Jun 27, 2019 at 07:07:16 (UTC)
Goto Top
Ja... in Zeile 4 steht jetzt eine 1 statt der 0

Aber funktionieren tut es ja face-smile
Werde es aber dennoch jetzt mit der 1 übernehmen.
Was bewirkt diese 1 denn?

Gruß
imebro
Member: colinardo
colinardo Jun 27, 2019 updated at 07:14:03 (UTC)
Goto Top
Aber funktionieren tut es ja
Aber ineffektiv und fehlerhaft, da wäre die IF Abfrage sinnlos!
Was bewirkt diese 1 denn?
Na was wohl, getItemAt kannst du dir selbst ins deutsche übersetzen dann weist du auch wofür der Parameter steht! Wenn nicht lese die Doku zu field > Methods > getItemAt(Index).

p.s. Freitag ist erst morgen.
Mitglied: 37414
37414 Jun 27, 2019 at 07:17:21 (UTC)
Goto Top
Zitat von @colinardo:
p.s. Freitag ist erst morgen.

Stimmt, aber morgen habe ich Urlaub (aber nur, weil ich zu einer Beeredigung muss...).

Ich vermute mal, dass die 1 damit zu tun hat, dass die automatisch eingesetzte (aktuelle) Jahreszahl immer über der vorherigen Jahreszahl steht. Und somit eben auch die zusätzlichen Angaben (unbekannt und >) dann darüber.

Werde mir aber mal etwas über" field > Methods > getItemAt(Index)" anlesen face-smile

Danke und Gruß,
imebro