aus einer function() einen Wert in eine Variable übergeben

wernerstumpferl

Grünschnabel
Hallo Leute,
ich habe mir schon die Augen eckig gelesen aber nichts gefunden.
Innerhalb eines Formulares gibt es ein <select> mit statischen <option>´s. Der ausgewählte Wert (numerisch) wird dann über folgende Funktion von einem Wert aus einer Datenbank abgezogen, das Ergebnis einem
<input type="hidden" id="anzhddapp">
zugeordnet (z.B. Auswahl 2, Datenbankwert 6, Ergebnis 4). Soweit so gut.

function calculate(anzhdd_server) {
var a = Number(document.getElementById("anzhddbs").value);
var b = anzhdd_server;
document.getElementById("anzhddapp").value=b-a;

<select name="anzhddbs" onchange="calculate(<cfoutput>#recordset1.hdd#</cfoutput>)">

Nun will ich aber ohne dass das Formular neu geladen werden muss in einem weiteren <select> nun dynamisch die Werte 0,1,2,3,4 darstellen.
Hat jemand eine Idee hierzu ?

Gruß Werner
 
Hallo Sven,

vielleicht habe ich mich unklar ausgedrückt.
Innerhalb eines Formulares wird eine Auswahlliste angezeigt, deren Inhalt statisch ist. Je nach Auswahl in dieser Auswahlliste wird über die Funktion "calculate" ein bestimmter Wert errechnet (die zweite Variable stammt aus einer Datenbank) (Beispiel: in Auswahlliste wird 2 gewählt, der Wert aus der Datenbank ist 6 somit das Ergebnis der Funktion = 4). Nach Auswahl eines statischen Inhaltes soll nun eine weitere Auswahlliste entsprechend angezeigt werden, deren Inhalt vom Ergebnis der Funktion abhängig ist und zwar dynamische Werte (in diesem Fall von 0 - 4).

<select name="anzhddbs" onchange="calculate(<cfoutput>#recordset1.hdd#</cfoutput>)">
<option value="0">keine</option>
<cfif recordset1.hdd gte 1><option value="1">1</option></cfif>
<cfif recordset1.hdd gte 2><option value="2">2</option></cfif>
<cfif recordset1.hdd gte 3><option value="3">3</option></cfif>
<cfif recordset1.hdd gte 4><option value="4">4</option></cfif>
</select>

<input type="text" id="anzhddapp" name="anzhddapp">

<select name="anzhddrest">
.
.... wie man dynamische Inhalte erzeugt (mit coldfusion) weiss ich, aber nicht, wie ich
.... das jetzt so hinkriege, dass ich den Inhalt des <inputs> "anzhddapp" auslese und
.... gleichzeitig das Formular nicht neu laden muss. Dieser <select> muss also zum
.... einen dynamisch sein (wenn ich den Wert aus <input> auslesen könnte wäre das
.... schon mal kein Problem) und zum anderen muss er sozusagen "refreshed" werden
.... wenn vorhergend etwas geändert wird, aber ohne dass die Site oder das Formular
.... neu geladen werden muss.
.
</select>

Gruß Werner
 
Nö...du hast dich schon verständlich ausgedrückt...hast du dir die verlinkten Seiten denn schon mal zu Gemüte geführt?

Das dynamische Erstellen/Ändern eines <select> erfordert als 1. Schritt nun mal das Erzeugen der einzufügenden <option>'en.
 
Hallo Sven,

ja, habe ich. Nur wenn ich das Recht verstehe, dann werden die <options> statisch vordefiniert über eine Array und dann dynamisch aufgrund des vorhergehendes <selects> ausgewählt. Wäre ja nicht schlimm, wenn nicht die Inhalte für das statische <option> aus einer Datenbank kommen würde, deren Inhalt sich ja immer ändern wird. Also entstehen da ja zig Möglichkeiten, die ich hardcodieren müsste. Und um das nicht zu tun sondern möglicherweise deutlich eleganter zu lösen, dafür habe ich nichts gefunden.

Siehst du da eine Möglichkeit ?

Gruß Werner
 
Zuletzt bearbeitet:
dynamisch eine Option hinzufügen (aus SelfHtml!):
Javascript:
<script type="text/javascript">
function Hinzufuegen () {
  NeuerEintrag = new Option(document.Testform.neu.value, document.Testform.neu.value, false, true);
  document.Testform.Auswahl.options[document.Testform.Auswahl.length] = NeuerEintrag;
  document.Testform.neu.value = "das ist eine neue Option";
}
</script>
 
@ Sparks: Soweit waren wir schon:)
Es geht wernerstumpferl jetzt darum, die Inhalte der zu erzeugenden Optionen erstmal vom Server abzuholen, jenachdem, ...was in einer anderen Liste ausgewählt wurde, sollen andere Optionen erzeugt werden.

@wernerstumpferl:
wie umfangreich ist denn eigentlich die Anzahl möglicher Varianten?
Wenn es sich im erträglichen Rahmen bewegt, wäre es u.U. sinnvoller, die Inhalte der Optionen in mehrdimensionalen Arrays zu speichern, dann müsste man nicht jedesmal beim Server anfragen.
 
Hallo Sven,

sorry für die verspätete Antwort, ich war auswärts unterwegs.

Danke für den Link, habe ich mir angeschaut. Leider kann ich kein PHP sondern "nur" Coldfusion. Deshalb kann ich mit der Syntax nun nicht richtig viel anfangen.
Zu deiner Frage, es sind ca. 20 Möglichkeiten die zur Verfügung stehen. Das ganze ist ein Konfigurator für Server, wobei im statischen <select> die für das Betriebssystem zu reservierenden Festplatten angezeigt werden:
HTML:
<select name="anzhddbs" ... wie auch immer>
     <cfif recordset1.hdd gte 0>
          <option value="0">keine</option>
     </cfif>
     <cfif recordset1.hdd gte 1>
          <option value="1">1</option>
     </cfif>
     <cfif recordset1.hdd gte 2>
          <option value="2">2</option>
     </cfif>
     <cfif recordset1.hdd gte 3>
          <option value="3">3</option>
     </cfif>
     <cfif recordset1.hdd gte 4>
          <option value="4">4</option>
     </cfif>
</select>
Wenn nun also z.B. 2 Festplatten für das Betriebssytem reserviert werden, das Gehäuse aber 6 Festplatteneinschübe hat, dann bleiben noch 4 für die Datenplatten übrig. In der Variable "recordset1.hdd" steht die Anzahl aller verfügbaren Festplatten drin. Das Ergebnis aus "recordset1.hdd - <select name=anzhddbs>" soll dann nun so dargestellt werden
HTML:
<select name="anzhdddaten"... wie auch immer>
<option value="0">keine</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>

Also alles in allen könnte man das wohl (zwar unflexibel) auch statisch lösen.
Bleibt also noch die Frage, wie man das dynamische <select> dazu bringt, sich nach Eingabe im ersten <select> zu refreshen, ohne dass das Formular gesendet werden muss.

Gruß Werner
 
Zuletzt bearbeitet:
Hallo Leute,

falls es interessiert, ich habe es doch dynamisch hinbekommen incl. refresh:

HTML:
<form name="form1" id="form1" method="post" action="konfserver03.cfm" target="_self">
// Datenbankvariable in einen <input> schreiben

<input type="hidden" size="2" name="anzhdd" value="<cfoutput>#recordset1.hdd#</cfoutput>">

<select name="anzhddbs" onChange="redirect(this.value)" >
  <option value="0">keine</option>
  <cfif recordset1.hdd gte 1>
  <option value="1">1</option>
  </cfif>
  <cfif recordset1.hdd gte 2>
  <option value="2">2</option>
  </cfif>
  <cfif recordset1.hdd gte 3>
  <option value="3">3</option>
  </cfif>
  <cfif recordset1.hdd gte 4>
  <option value="4">4</option>
  </cfif>
  </select>

// das dynamische wird nun vorbelegt mit einem beliebigen Wert

<select name="anzhddap">
  <option value="0">keine</option>
</select>

<script>
<!--
//Dieses Skript stammt von Michael Mailer´s JavaScripts
//URL: http://www.webaid.de/js  --  eMail: mm@webaid.de
//und wurde von mir etwas angepasst.
//Einmal wurde das Array ausserhalb der Funktion angelegt, damit in "anzhddap" die volle
//Anzahl der verfügbaren Festplatten drinsteht.
//Innerhalb der Funktion wird das dann nochmals definiert, damit die option´s entsprechend
//bei Änderung angepasst werden.

var groups=document.form1.anzhddbs.options.value
var hdd=document.form1.anzhdd.value
var hddrest=hdd
var group=new Array(hddrest)
for (i=0; i<hddrest; i++)
group[i]=new Option(i,i)
var temp=document.form1.anzhddap

function redirect(x){
var hdd=document.form1.anzhdd.value
var hddrest=hdd-x+1
var group=new Array(hddrest)
for (i=0; i<hddrest; i++)
group[i]=new Option(i,i)
var temp=document.form1.anzhddap

for (m=temp.options.length-1;m>0;m--)
temp.options[m]=null
for (x=0; x<hddrest; x++){
temp.options[x]=new Option(group[x].text,group[x].value)
group[0].text="keine"
temp.options[0]=new Option(group[0].text,group[0].value)
}
temp.options[0].selected=true
}
//-->
</script>
</form>

Danke an alle.
Gruß Werner
 

Neue Beiträge

Zurück