• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Validierung in Abhängigkeit zu Dropdownmenü

maddoc

New member
Hallo,

ich möchte gern ein Feld so validieren, dass in Abhängigkeit eines Dropdownfeldes nur jeweils ein bestimmter Wertebereich eingegeben werden kann. Folgendes habe ich probiert:

Code:
var a = getField("Medikament1").value
var b = getField("Dosis").value

if  (a == 01)//Medikament 1
{ 
	if (b < 50 || b > 300)
	{
		app.alert("Die Dosis liegt ausserhalb der zulässigen Werte zwischen 50 und 300 mg.");
		doXwithFields(event.target.name,1);
		event.value = "";
	}
}
else
{
	if (a == 02)//Medikament 2
	{
		if (b < 20 || b > 200)
		{
			app.alert("Die Dosis liegt ausserhalb der zulässigen Werte zwischen 20 und 200 mg.");
			doXwithFields(event.target.name,1);
		        event.value = "";
		}
	}
        else.... usw.
}

Momentan löscht er mir jeden Wert wieder raus. Das soll er aber nur tun, wenn der Wert ausserhalb der range liegt. Ich mache das mit javascript für adobe Formulare.
Ich hoffe ihr könnt helfen.

Danke!
 
Ja das alert-Fenster wird angezeigt und der Wert anschließend gelöscht, auch wenn der Wert richtig ist.
Eingefügt habe ich das im Reiter "Validate" - "Run custom validation script" (Adobe Formular)

if (a == 01) das ist oktal, für 1 und 2 noch kein problem, aber ab 8
liefert getField("Dosis").value einen string oder eine number?

Dei Exportwerte des Feldes "Medikament" gehen bis 42. Wie genau kann ich das Problem verstehen? Funktioniert das dann überhaupt?
 
Eingefügt habe ich das im Reiter "Validate" - "Run custom validation script" (Adobe Formular)
und wann wird das ausgeführt? immer wenn du etwas änderst?


Dei Exportwerte des Feldes "Medikament" gehen bis 42. Wie genau kann ich das Problem verstehen? Funktioniert das dann überhaupt?
01 ist oktal 1
010 ist oktal 10 das ist dezimal 8
1 ist dezimal 1 und 10 dezimal 10 und 8 dezimal 8
 
Ja immer wenn ich etwas ändere.

Wie genau kann ich das mit den Zahlen verstehen? Muss ich die Exportwerte ändern? aktuell sehen diese so aus: 01, 02, 03, ..... 10, 11 bis 42
Kann ich einfach die Programmierung ändern? Wie könnte diese aussehen?
 
Eingefügt habe ich das im Reiter "Validate" - "Run custom validation script" (Adobe Formular)
und musst du dort vielleicht noch irgendein flag setzen, daß die validierung gut gegangen ist? return true oder sowas in der art?

Wie genau kann ich das mit den Zahlen verstehen? Muss ich die Exportwerte ändern? aktuell sehen diese so aus: 01, 02, 03, ..... 10, 11 bis 42
Kann ich einfach die Programmierung ändern? Wie könnte diese aussehen?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number
 
Ich denke mal das Problem ist der Typ des Wertes den du vergleichen willst. Also ist der Wert eine Zahl, ober ein String (Zeichenkette)...? Da musst du halt prüfen was in a und b als value zurück kommt. Bei normlen Input-Feldern in einem HTML-Formular kommt als value auch ein String zurück, den du dann entsprechend wandeln musst um einen Zahlenvergleich zu machen.
 
Bei normlen Input-Feldern in einem HTML-Formular kommt als value auch ein String zurück, den du dann entsprechend wandeln musst um einen Zahlenvergleich zu machen.
im HTML-Formular würde js das automatisch casten, das ist nicht schön, aber geht.
ob das im pdf auch so ist keine ahnung.
außerdem hatten wir ja schon ein paar pdf-fragen, da meine ich mich schwach erinnern zu können, das im pdf value je nach feldeigenschaft string oder number oder ... liefert
 
im HTML-Formular würde js das automatisch casten
Ja aber nur wenn ich Operatoren verwende. Auch unterscheidet sich ja if (a == 01) und if (a === 01), da ja auch der Typ verglichen wird. Um ganz sichere nummerische Werte weiter zu verarbeiten würde ich das so machen
Code:
if(!isNaN(parseFloat(a)) && isFinite(a)){
   /* Wert a ist eine Nummer oder eine Nummer als String */
}
 
Wenn ich den Exportwert auf mit 01 ... festlege ist das dann keine number?

So hab ich das probiert, funktioniert aber leider. Auch nicht wenn ich === nutze.
Code:
var a = getField("Medikament").value
var b = getField("Dosis").value

if(!isNaN(parseFloat(a)) && isFinite(a))
{
   /* Wert a ist eine Nummer oder eine Nummer als String */
   if (a == 01)
	{ 
		if (b < 50 || b >= 300)
		{
			app.alert("Die Dosis liegt ausserhalb der zulässigen Werte zwischen 50 und 300 mg.");
			doXwithFields(event.target.name,1);
			event.value = "";
		}
	}	 
}

Er holt sich aber den Exportwert 01. Denn wenn ich ein anderes Medikament im Dropdownfeld auswähle und dann eine Dosis eingebe, dann macht er nichts. Das ist ja richtig, weil ich das noch nicht definiert habe. Frage also ob das dann wirklich nur an der 01 liegt?
 
Zuletzt bearbeitet:
Wenn ich den Exportwert auf mit 01 ... festlege ist das dann keine number?
keine ahnung was ein "Exportwert" ist
01 ist eine oktale zahl
basiswissen wirst du schon benötigen

Er holt sich aber den Exportwert 01. Denn wenn ich ein anderes Medikament im Dropdownfeld auswähle und dann eine Dosis eingebe, dann macht er nichts. Das ist ja richtig, weil ich das noch nicht definiert habe.
???

Frage also ob das dann wirklich nur an der 01 liegt?
vermutlich liegt es überhaupt nicht an der 01, das ist nur ein weiterer möglicher fehler. wenn du z.b. 08 und 09 stehen hast, dann sind das keine gültigen oktalen zahlen. keine ahnung was dann im pdf passiert.
es kann an allem möglichen liegen. z.b. musst du die frage klären, wie ein gültiges "custom validation script" auszusehen hat.
 
Was passiert denn wenn du ein alert machst?
Code:
var a = getField("Medikament").value
var b = getField("Dosis").value

app.alert(typeof a);
app.alert(typeof b);
 
beides "number"

- - - Aktualisiert - - -

Ich habe eine andere Lösung gefunden und habe ein Validierungsskript (Dokumentenfunktion) geschrieben, was das Dosisfeld in Abhängigkeit des Dropdown-Feldes prüft.
Damit funktioniert das ganz gut.

Für alle die es zukünftig evtl interessiert, die Dokumentenfunktion sieht so aus:

Code:
function isValid2(min1,max1,min2,max2)
{
	if(event.value != "") // value wurde gelöscht?
	{	
		var tmp = "" + event.value; 
		var v = tmp.replace(",", ".");
		
		if (v >= min1 && v <= max1)  // befindet sich der Wert zwischen den grenzwerten max1 und min1?
		{
			doXwithFields(event.target.name,4);
			return true;
		}
		else if(v >= min2 && v <= max2) // nein? befindet sich der Wert zwischen den grenzwerten max2 und min2?
		{	
			var res = app.alert( // falls ja, wird nachgefragt, ob sich bei der eingabe möglicherweise geirrt wurde.
			{ 
				cMsg: "Value: "+event.value+" Sind Sie sicher?",
				cTitle: "Warnung", 
				nType: 2 
			});
			
			// 4 = Ja, 3 = Nein

			if(res == 4)
			{	
				// call do-Function with parameter: "warning"
				doXwithFields(event.target.name,2);
				return true;
			}
			else if(res == 3)
			{
				event.value = "";
				// call do-Function with parameter: "blank"
				doXwithFields(event.target.name,1);
				return true;
			}
		}
		else // falls der wert zu absurd ist -> löschen
		{
			app.alert("Bitte prüfen Sie Ihre Eingabe.");
			doXwithFields(event.target.name,1);
			event.value = "";
		}
	}
	else
		// Datum wurde gelöscht
		doXwithFields(event.target.name,1);	
}

Dann muss man nur noch die Feldvalidierung mit einem kurzen Code befüllen:

Code:
var a = getField("spa.nsa._nsa1_hist_a_").value
if (a == 01)
{
	isValid2(50,300,0,9999);
}

Danke nochmal für eure Hilfe!! Dadurch sind mir einige andere Dinge auch klarer geworden!
 
Zurück
Oben