Frage Zwei Kontrollkästchen in JavaScript überprüfen vor Druck

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Max1m9l9an8

Neues Mitglied
1 März 2019
18
0
1
20
Guten Tag
Ich benötige einen Code für Javascript in Adobe Acrobat Pro XI, welcher 2 Checkboxen überprüft.

Im Grunde soll der Code so funktionieren, dass wenn ich auf meinen Druck-Button klicke überprüft wird ob mindestens 1 von 2 Checkboxen ausgefüllt ist (egal welche von den beiden), wenn dies der Fall ist soll gedruckt werden, wenn nicht soll eine Fehlermeldung ausgegeben werden die besagt, dass mindestens 1 von den 2 Checkboxen ausgefüllt sein muss.

Mein bisheriger versuch ist:
allgood();
function allgood()
{
var mel;
mel=""
for (var i=0;i<this.numFields;i++)
{
var fName=this.getNthFieldName(i);
var f=this.getField(fName);
if ((f.type = "checkbox") && !(f.checked))
{
mel=mel + fName + ", ";
}
}
if (mel==""){
app.execMenuItem("Print");
}
else
{app.alert("Pflichtfelder nicht angekreuzt! Bitte folgende Checkboxen bestätigen: " + mel);
}
}

Nur hier wird ja das ganze Dokument überprüft, aber es sollen halt nur diese beiden Checkboxen überprüft werden.

Bin totaler Anfänger hab mir alles selber beigebracht, deswegen bitte eine Erklärung in einfachen Worten

Danke ;)
 

Aaron3219

Senior HTML'ler
6 Oktober 2015
1.017
200
63
17
Also ich würde das ganze ja im backend prüfen. Das musst du ja eh tun und wenn du mit Ajax arbeitest, dann musst du auch nicht jedes Mal die Seite neu laden.
Bin totaler Anfänger hab mir alles selber beigebracht, deswegen bitte eine Erklärung in einfachen Worten
Aber wegen dieses Satzes macht das für dich wahrscheinlich (noch) keinen Sinn, deswegen hier eine simple Frontend Überprüfung.

Also du arbeitest ja hier mit Vanilla-JS. Du hast mir leider nicht den Code deines forms gegeben, aber deine form sieht ja ungefähr so aus:
HTML:
<form type="POST">
    <input type="radio" name="radio-button" id="checkbox1">
    <input type="radio" name="radio-button" id="checkbox2">
  
    <button type="submit">
        Submit
    </button>
</form>
Wir erweitern jetzt deine form um einen onsubmit Attribut. In diesem Attribut kannst du z.B. eine JS-Funktion ausführen:
HTML:
<form type="POST" onsubmit="return absenden()">
    ...
</form>

<script>
function absenden() {
  
}
</script>
Deine JavaScript-Funktion überprüft nun, ob eine der beiden checkboxen ausgefüllt ist.
JavaScript:
function absenden() {
  var radio = document.querySelector('input[name = "radio-button"]:checked');

  if (radio == null) {
    alert("Bitte einen Button auswählen!");
    return false;
  }
}
Besonders wichtig sind diese Zeilen:
JavaScript:
var radio = document.querySelector('input[name = "radio-button"]:checked');
if(radio == null) {... return false;}
Wir selecten also alle inputs, die das Attribut name mit der value radio-button haben. Zusätzlich benutzen wir einen CSS-Selektor, der nur die Elemente selektiert, die :checked sind. Nun fragen wir, ob radio == null ist. Dieser ist nur null, wenn kein Element ausgewählt wurde, also auch keins mit dem querySelector ausgewählt wurde.
Wenn dem so ist, dann return false;. Wir stoppen also den submit. Es ist wichtig, dass du in deinem onsubmit Attribut auch return davorschreibst, ansonsten wird zwar deine Funktion beendet, der submit aber nicht gestoppt. Du musst also den repsonse returnen.

Hier ist der Code zum Testen und herumprobieren:

Ich hab jetzt versucht es möglichst genau und einfach zu erklären. Wenn du einzelne Dinge nicht verstanden hast, dann frage gerne nach. Wenn du jetzt aber viel Bahnhof verstanden hast, dann fehlen hier Grundlagen, die du dir selber aneignen musst.
 

Aaron3219

Senior HTML'ler
6 Oktober 2015
1.017
200
63
17
Genau das deckt meine Lösung doch ab. Es überprüft doch nur die checkboxen, die einen bestimmten name Attribut haben. Dieser ist im JS-Code eindeutig festgelegt.

Deine Aufgabe ist es also, den zu überprüfenden Checkboxen den entsprechenden Attribut zu geben.
 

Max1m9l9an8

Neues Mitglied
1 März 2019
18
0
1
20
Tut mir leid habe gerade nen Denkfehler und bekomme das einfach nicht hin bzw. den Code richtig zusammengebastelt. Zumindest funktioniert es nicht.....

MfG
 

Max1m9l9an8

Neues Mitglied
1 März 2019
18
0
1
20
Kriege den Code einfach nicht zusammengebastelt zumindest nicht so, dass er funktioniert mache wohl irgendeinen Fehler
 

Max1m9l9an8

Neues Mitglied
1 März 2019
18
0
1
20
Also die Kästchen werden garnicht überprüft und kann einfach drucken egal ob ausgefüllt oder nicht
 

Aaron3219

Senior HTML'ler
6 Oktober 2015
1.017
200
63
17
Tja... da fehlen wohl die Grundlagen. Es kann 1000 Gründe haben warum es nicht funktioniert. Es macht hier wenig Sinn und es ist auch nicht meine Aufgabe deinen kompletten Code anzuschauen und/oder dir die Basics beizubringen. Ich empfehle dir die Grundlagen anzuschauen und sich dann nochmal damit zu beschäftigen.
 

basti1012

Aktives Mitglied
26 November 2017
760
70
28
38
Minden
sebastian1012.bplaced.net
auserdem solltest du mal irgendwas an Code zeigen was du schon gemacht hast und so weiter. Ich sehe nur den Code von @Aaron3219 und da muß man nix kucken weil das schon geht .

Da er ja ein Funktionierenden Code gepostet hat solltest du mal jetzt dein Code zeigen wo der rein soll und so weiter weil bis jetzt sieht man nur nee Lösung die geht und nix anderes
 

Max1m9l9an8

Neues Mitglied
1 März 2019
18
0
1
20
Sry aber ich weiß nicht was für einen Code ihr meint!?
Benutze Adobe Acrobat Pro XI somit kann ich vorgefertigte Aktionen nutzen brauchte bis jetzt noch keinen Code schreiben, habe nur vorgefertigte Aktionen benutzt, und jetzt suche ich ein JS, das ich in meinem "Druck"-Button schreibenkann und es somit wie oben beschrieben funktioniert.

Mein Problem ist wirklich, dass mein Chef mich in dieses Thema reingeworfen hat und ich absolut 0 Ahnung hatte bzw habe.

Normalerweise soll ich nur die Dokumente erstellen aber dann kamen Extrawünsche hinzu, wegen denen muss ich also jetzt etwas vollbringen von dem ich absolut garkeine Ahnung habe, da ich noch nie mit Java zuvor gearbeitet habe, das einzige was ich je benutzt habe war BlueJ in der Schule im Informatikunterricht und dieser wurde allerdings nur als Schlafausgleich benutzt.

Deswegen stelle ich mich hier auch so dumm an.

Kann mich dafür auch nur entschuldigen.
 

Aaron3219

Senior HTML'ler
6 Oktober 2015
1.017
200
63
17
Mein Problem ist wirklich, dass mein Chef mich in dieses Thema reingeworfen hat und ich absolut 0 Ahnung hatte bzw habe.
Dann bleibt dir wohl nichts anderes übrig, als ihn darüber zu informieren, dass du hier mit einer Sache beauftragt wurdest, von der du wenig Ahnung hast und das du Unterstützung brauchst.

Java ≠ JavaScript!!!

Achso... ja damit kenne ich mich eh nicht aus. Es ist aber auf jeden Fall möglich, JavaScript zu benutzen, wie in folgendem Video gezeigt wird:

Das JavaScript muss auf den Button gebindet werden, nur fehlt mir die Info, wie ich checkboxen überhaupt selektieren kann... gibt es eine Option, in der man irgendeine Art unique identifier für die Checkboxen hat?
Denn laut meinen Recherchen müsste das ganze so oder so ähnlich funktionieren:
JavaScript:
if (this.getField("Fieldname1").value === "Off" || this.getField("Fieldname2").value === "Off") {  
   if(this.getField("Fieldname1").value === "Off")  {
      this.getField("Fieldname1").setFocus();
   } else if(this.getField("Fieldname2").value === "Off") {
      this.getField("Fieldname2").setFocus();
   }
   app.alert("Bitte füllen sie einer der Checkboxen aus!");
   return false;
}
Ich könnte mir vorstellen, dass Fieldname1 hier einfach der Fieldname ist, den du angeben musst, wenn du eine Checkbox erstellst. Diese beiden Fieldnames trägst du da ein.

Ich habe leider das Programm nicht, also kann ich es auch nicht ausprobieren. Weißt du, was ich meine mit den Fieldnames?

Edit:
Es scheint auch sowas wie document-actions zu geben. Da kannst du z.B. die Funktion vor dem Drucken oder so ausführen:
vielleicht kannst du das ja gebrauchen.
 
Zuletzt bearbeitet:
Reactions: Max1m9l9an8

Max1m9l9an8

Neues Mitglied
1 März 2019
18
0
1
20
JavaScript:
if (this.getField("Fieldname1").value === "Off" || this.getField("Fieldname2").value === "Off") {
if(this.getField("Fieldname1").value === "Off") {
this.getField("Fieldname1").setFocus();
} else if(this.getField("Fieldname2").value === "Off") {
this.getField("Fieldname2").setFocus();
}
app.alert("Bitte füllen sie einer der Checkboxen aus!");
return false;
}
Das hat mir auf jedenfall schonmal sehr geholfen, die beiden Kästchen werden überprüft allerdings ist es egal ob eine Checkbox ausgefüllt ist oder nicht mir wird immer die Meldung angezeigt, dass eine der beiden Checkboxen ausgefüllt werden muss und drucken kann ich auch wenn ich eine vorgefertigte aktion einfüge also muss ich nurnoch hinbekommen, dass es richtig funktioniert und dann noch den druckbefehl in den Code schreiben aber eine große Hürde ist schon geschafft.

Danke auf jedenfall
 

Aaron3219

Senior HTML'ler
6 Oktober 2015
1.017
200
63
17
Klar... mein Fehler. Ich überprüfe hier mit einem || Operator. Dieser steht für "oder".
Wenn also eine der beiden Checkboxen nicht ausgefüllt ist, soll die Fehlermeldung ausgegeben werden.
Das heißt aber, dass ja immer beide ausgefüllt sein müssen, damit die Meldung nicht kommt.

Ersetze das || durch ein &&. Dann wird die Fehlermeldung ausgegeben, wenn beide Checkboxen nicht ausgefüllt sind. Das ist ja das, was du willst.

drucken kann ich auch wenn ich eine vorgefertigte aktion einfüge
Probier mal das hier:
JavaScript:
if (this.getField("Fieldname1").value === "Off" && this.getField("Fieldname2").value === "Off") {
   if(this.getField("Fieldname1").value === "Off")  {
      this.getField("Fieldname1").setFocus();
   } else if(this.getField("Fieldname2").value === "Off") {
      this.getField("Fieldname2").setFocus();
   }
   app.alert("Bitte füllen sie einer der Checkboxen aus!");
   this.print(false);
}
Denk daran, dass dieser Code vor dem "Will Print"-Event eingefügt werden muss:
Laut dieser Seite sollte sich die Option hier verstecken:
To edit or create a Document Action script, use the menu item:

Advanced>JavaScript>Set Document Actions
Das ganze sollte so oder so änhlich aussehen:
5091
nur, dass du halt auf Print drücken musst.

Ich habe allerdings gelesen, dass es nicht möglich ist, den User am Drucken zu hindern (Zumindest in Adobe 8 und 9). In diesem Falle ist das höchste was du tun kannst ein Popupfenster, so wie es jetzt auch ist zu machen.
 
Zuletzt bearbeitet:
Reactions: Max1m9l9an8

Max1m9l9an8

Neues Mitglied
1 März 2019
18
0
1
20
Soweit funktioniert alles perfekt und das mit dem Drucken soll auch irgendwie funktionieren hab sowas schonmal gesehen aber weiß nicht wie. Ist ja mittlerweile Adobe Acrobat Pro 11

Werde da nochmal bisschen recherchieren und rumbasteln.

Aber auf jedenfall danke für die Hilfe und die Mühe hat mir sehr viel gebracht ;)
 
Werbung:

Latest posts