1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Variablen in Var deklarieren

Dieses Thema im Forum "Javascript & Ajax" wurde erstellt von darkpriest, 16. November 2007.

  1. darkpriest

    darkpriest Grünschnabel

    Hallo ins Forum,

    ich möchte für ein Kalkulationsschema Werte aus einem Formular entnehmen. Diese Variante möchte ich nun vereinfachen, leider habe ich dabei folgendes Problem:

    Code (Text):
    1.  
    2.  
    3. frm=document.form1;
    4.  
    5. var variablen = new Array("neuwagenlpnettoid"); // hier sollen noch mehr werte rein
    6.  
    7.  
    8.  
    9. for (var i = 0; i < variablen.length; i++) {
    10.  
    11. var document.forms["form1"].elements[variablen[i]].id = (document.forms["form1"].elements[variablen[i]].value.replace(",", "."));
    12.  
    13. }
    14.  
    15.  
    16.  
    In dem Array "Variablen" möchte ich alle Werte reinschreiben, die ausgelesen werden sollen und die Zahlen umgewandelt! Leider bekomme ich immer wieder die Fehlermeldung "Objekt erwartet".

    Kann ich diese Zeilen überhaupt so erstellen?

    Wäre für jeden Tipp sehr dankbar!

    Darkpriest
  2. Quaese

    Quaese Moderator Moderator

    Hi,

    anhand deines Codeschnipsels ist nicht zu erkennen, woran der Fehler liegen könnte. Folgendes Konstrukt funktioniert bei mir problemlos:
    Code (Text):
    1.  
    2. <html>
    3. <head>
    4. <meta name="author" content="Quaese">
    5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    6. <script type="text/javascript">
    7.     <!--
    8. frm=document.form1;
    9. var variablen = new Array("neuwagenlpnettoid"); // hier sollen noch mehr werte rein
    10.  
    11. function theFunc(){
    12.   for (var i=0; i < variablen.length; i++) {
    13.     document.forms["form1"].elements[variablen[i]].id = document.forms["form1"].elements[variablen[i]].value.replace(/,/g, ".");
    14.     alert(document.forms["form1"].elements[variablen[i]].id);
    15.   }
    16. }
    17.     //-->
    18. </script>
    19. </head>
    20. <body>
    21. <form name="form1">
    22.     <input type="text" name="neuwagenlpnettoid" value="1,234">
    23.   <button onclick="theFunc()">theFunc()</button>
    24. </form>
    25. </body>
    26. </html>
    27.  
    Ciao
    Quaese
  3. darkpriest

    darkpriest Grünschnabel

    Hallo,

    erstmal danke für deine Antwort!

    Leider bringe ich meine Funktion nicht zum Laufen! Wahrscheinlich ist da ein Denkfehler von mir drin!

    Zur Erklärung: Ich habe ein größerers Formular, in dem mehrere Berechnungen mit Javascript erfolgen sollen! Ich benötige dazu ca. 30 Felder, die ich in der zuerst aufgerufenen Funktion wie folgt einfüge:

    Code (Text):
    1. var neuwagenlpnettoid               = frm.neuwagenlpnettoid.value.replace(",", ".");
    2.  
    3. usw.
    4.  
    Dann erfolgen meine Berechnung und dann gebe ich die Werte wieder mit

    Code (Text):
    1. frm.neuwagenlpnettoid.value         = (Number(neuwagenlpnettoid)).toFixed(2).replace(".", ",");
    zurück an das Formular!

    Das oben angeführte Feld kommt aber auch noch in 2 anderen Funktionen vor, die aber erst beim ändern von Feldern aufgerufen werden! Wie und vorallem wo muß ich die Felder definieren?

    Meine jetzige Funktion funktioniert zwar, benötigt aber viel sich wiederholenden Quelltext, dies wollte ich mit Hilfe von Arrays vermeiden! Aber irgendwie will es nicht! Ich bekomme entweder die Meldung "Objekt erwartet" oder "document.forms.form1.elements ist Null oder kein Objekt"!

    Habe ich einen strukturellen Fehler in meinem Script? Hat jemand einen Vorschlag, wie man das einfacher und sauberer lösen kann, anstatt den selben Quelltext, 30 mal aufzuführen?

    Wäre für jede Hilfe sehr dankbar!

    Vielen Dank!

    Darkpriest
  4. deepthroat

    deepthroat Premium-User

    Hi.
    Wenn du die Felder in verschiedenen Funktionen brauchst, dann solltest du sie global definieren.
    Anscheinend gibt es kein Forumular auf deiner Seite mit dem Namen "form1". Kann es sein, das du evtl. diese Funktion schon aufrufst, bevor die Seite vollständig geladen ist?

    Gruß
  5. darkpriest

    darkpriest Grünschnabel

    Hallo,

    danke für deine Antwort!

    Ich rufe die Funktion auf, bevor das eigentliche Formular geladen wird. Dies habe ich darum gemacht, damit immer sofort alles berechnet wird!

    Wie kann ich denn dieses Problem umgehen bzw. wie macht man das dann?

    Vielen Dank!

    Darkpriest
  6. deepthroat

    deepthroat Premium-User

    Hi.
    Man würde die Funktion erst aufrufen wenn die Seite und somit auch die form geladen ist, also in der window.onload Funktion.

    Zeig doch mal den kompletten HTML Code deiner Seite, sonst ist das mehr oder weniger ein Herumraten.

    Gruß
  7. darkpriest

    darkpriest Grünschnabel

    Hallo,

    ich mache folgenden Aufruf:

    Code (Text):
    1.  
    2.  
    3. </head>
    4.  
    5. <body onLoad="formular(<?php echo $formular; ?>); gw(<?php echo $gwhereinin; ?>); doLiveRes(<?php echo $kalkschema; ?>); ausgabe()"  >
    6.  
    Der Javascript Funktion doLiveRes muß ich einen PHP-Paramter übergeben. Ich habe dieses Event verwendet, damit beim Öffnen die Berechnung sofort durchgeführt wird.

    Das Formular:

    Code (Text):
    1. <form style="width:800px;" action=" <?php print $_SERVER['PHP_SELF'] . "?" . "id=" . $id; ?>" method="post" id="Verwaltungsunterlage" name="form1" >
    Code (Text):
    1. <label id="neuwagenlpnettobez" for="name" class="info" >Neuwagen Listenpreis netto</label><input type="text" id="neuwagenlpnettoid" name="kalk[neuwagenlpnettoin]" value="0,00" class="infofield" tabindex="" onBlur="doLiveRes(); leave(this)" onFocus="enter(this)"  ></input>
    Meine Javascript - Datei schaut nun so aus:

    Code (Text):
    1. var provsys;
    2. var kalk;
    3. var systemnw;
    4. var systemgw;
    5. var frm=document.form1;
    6.  
    7.  
    8. function donachlass(test){
    9.  
    10. frm=document.form1;
    11.  
    12. neuwagenlpnettoid                           = frm.neuwagenlpnettoid.value.replace(",", ".");
    13. nachlassinprozentid                         = frm.nachlassinprozentid.value.replace(",", ".");
    14. nachlassid                                  = frm.nachlassid.value.replace(",", ".");
    15.  
    16. nachlassid                                  = neuwagenlpnettoid / 100 * nachlassinprozentid;
    17.  
    18. frm.nachlassid.value                        = nachlassid.toFixed(2).replace(".", ",");
    19.  
    20. doLiveRes()
    21.  
    22. }
    23.  
    24. function zuschuss(wert){
    25.  
    26. sonderpraemieid = frm.sonderpraemieid.value.replace(",", ".");
    27.  
    28. if (sonderpraemieid <= 10) {
    29.  
    30. frm=document.form1;
    31.  
    32.  
    33. neuwagenlpnettoid = frm.neuwagenlpnettoid.value.replace(",", ".");
    34.  
    35.  
    36. sonderpraemieid = neuwagenlpnettoid / 100 * sonderpraemieid;
    37.  
    38. frm.sonderpraemieid.value = sonderpraemieid.toFixed(2).replace(".", ",");
    39.  
    40. doLiveRes()
    41.  
    42. }
    43.  
    44. }
    45.  
    46.  
    47.  
    48. function doprozent(test){
    49.  
    50. frm=document.form1;
    51.  
    52. neuwagenlpnettoid = frm.neuwagenlpnettoid.value.replace(",", ".");
    53. nachlassinprozentid = frm.nachlassinprozentid.value.replace(",", ".");
    54. nachlassid = frm.nachlassid.value.replace(",", ".");
    55.  
    56.  
    57. nachlassinprozentid = nachlassid*100 / neuwagenlpnettoid;
    58.  
    59. frm.nachlassinprozentid.value = nachlassinprozentid.toFixed(3).replace(".", ",");
    60.  
    61. doLiveRes()
    62.  
    63. }
    64.  
    65.  
    66. function doLiveRes(){
    67.  
    68. frm=document.form1;
    69.  
    70.  
    71. var neuwagenlpnettoid               = frm.neuwagenlpnettoid.value.replace(",", ".");
    72. //alert(neuwagenlpnettoid);
    73.  
    74. var verkaufspreisid                 = frm.verkaufspreisid.value.replace(",", "."); 
    75. var nachlassinprozentid             = frm.nachlassinprozentid.value.replace(",", ".");
    76. var nachlassid                      = frm.nachlassid.value.replace(",", ".");
    77. var verkaufspreisid                 = frm.verkaufspreisid.value.replace(",", ".");
    78. var mindestverkaufspreisid          = frm.mindestverkaufspreisid.value.replace(",", ".");
    79. var bankid                          = frm.bankid.value.replace(",", ".");
    80.  
    81. var inzpraemieid                    =frm.inzpraemieid.value.replace(",", ".");
    82. var retpraemieid                    =frm.retpraemieid.value.replace(",", ".");
    83. var erpraemieid                     =frm.erpraemieid.value.replace(",", ".");
    84. var loypraemieid                    =frm.loypraemieid.value.replace(",", ".");
    85. var zulpraemieid                    =frm.zulpraemieid.value.replace(",", ".");
    86.  
    87. var sonderpraemieid                 =frm.sonderpraemieid.value.replace(",", ".");
    88. var geschrepkostenid                =frm.geschrepkostenid.value.replace(",", ".");
    89. var sonstigesid                     =frm.sonstigesid.value.replace(",", ".");
    90. var zubehoerid                      =frm.zubehoerid.value.replace(",", ".");
    91. var naturalrabattid                 =frm.naturalrabattid.value.replace(",", ".");
    92. var vermittlungsprovisionid         =frm.vermittlungsprovisionid.value.replace(",", ".");
    93.  
    94. var ekarenaid                       =frm.ekarenaid.value.replace(",", ".");
    95. var ekbetriebid                     =frm.ekbetriebid.value.replace(",", ".");
    96. var gukdid                          =frm.gukdid.value.replace(",", ".");
    97. var rlszid                          =frm.rlszid.value.replace(",", ".");
    98. var verssumid                       =frm.verssumid.value.replace(",", ".");
    99. var voraussichtlichekostenid        =frm.voraussichtlichekostenid.value.replace(",", ".");
    100. var praemiegeshisid                 =frm.praemiegeshisid.value.replace(",", ".");
    101.  
    102. praemiegesid = Number(inzpraemieid)+Number(retpraemieid)+Number(erpraemieid)+Number(loypraemieid)+Number(zulpraemieid);
    103.  
    104.  
    105.  
    106. if(schema == 10) {
    107.  
    108. nachlassgwid = Number(ekbetriebid)-Number(gukdid)-Number(rlszid)-Number(ekarenaid);
    109.  
    110. gesamtnachlassid = Number(nachlassid)+Number(nachlassgwid)+Number(bankid)-praemiegesid-Number(sonderpraemieid)+Number(sonstigesid)+Number(zubehoerid)+Number(naturalrabattid)+Number(vermittlungsprovisionid);
    111.  
    112. frm.gesamtnachlassid.value =  gesamtnachlassid.toFixed(2).replace(".", ",");
    113.  
    114.  
    115. frm.gesamtnachlass1id.value =  frm.gesamtnachlassid.value;
    116.  
    117. nachlassp1 = (Math.round((gesamtnachlassid*100/neuwagenlpnettoid)*1000))/1000;
    118.  
    119. nachlassp1 = nachlassp1 *1000;
    120.  
    121. nachlassp1 = Math.round(nachlassp1);
    122.  
    123. nachlassp1 = nachlassp1 / 1000;
    124.  
    125.  
    126. frm.gesamtnachlassinprozentid.value = nachlassp1.toFixed(3).replace(".",",");
    127.  
    128. if (frm.gesamtnachlassinprozentid.value == "NaN") frm.gesamtnachlassinprozentid.value = "0,000";
    129.  
    130. frm.gesamtprozentid.value           = frm.gesamtnachlassinprozentid.value;
    131.  
    132. frm.neuwagenlpnettoid.value         = (Number(neuwagenlpnettoid)).toFixed(2).replace(".", ",");
    133. frm.nachlassinprozentid.value       = (Number(nachlassinprozentid)).toFixed(3).replace(".", ",");
    134. frm.nachlassid.value                = (Number(nachlassid)).toFixed(2).replace(".",",");
    135. frm.nachlassgwid.value              = (Number(nachlassgwid)).toFixed(2).replace(".", ",");
    136.  
    137. frm.nachlassgweid.value             = frm.nachlassgwid.value;
    138. //frm.nachgwid.value                        = frm.nachlassgweinid.value;
    139.  
    140.  
    141. frm.bankid.value                    = (Number(bankid)).toFixed(2).replace(".", ",");
    142.  
    143. frm.inzpraemieid.value              =(Number(inzpraemieid)).toFixed(2).replace(".", ",");
    144. frm.retpraemieid.value              =(Number(retpraemieid)).toFixed(2).replace(".", ",");
    145. frm.erpraemieid.value               =(Number(erpraemieid)).toFixed(2).replace(".", ",");
    146. frm.loypraemieid.value              =(Number(loypraemieid)).toFixed(2).replace(".", ",");
    147. frm.zulpraemieid.value              =(Number(zulpraemieid)).toFixed(2).replace(".", ",");
    148.  
    149. frm.praemiegesid.value              =(Number(praemiegesid)).toFixed(2).replace(".", ",");
    150. frm.praemiegeshisid.value           =(Number(praemiegeshisid)).toFixed(2).replace(".", ",");
    151.  
    152. frm.praemiegesamtid.value           = frm.praemiegesid.value;
    153.  
    154. frm.sonderpraemieid.value           = (Number(sonderpraemieid)).toFixed(2).replace(".", ",");
    155. frm.sonstigesid.value               = (Number(sonstigesid)).toFixed(2).replace(".", ",");
    156. frm.zubehoerid.value                = (Number(zubehoerid)).toFixed(2).replace(".", ",");
    157. frm.naturalrabattid.value           = (Number(naturalrabattid)).toFixed(2).replace(".", ",");
    158. frm.vermittlungsprovisionid.value   = (Number(vermittlungsprovisionid)).toFixed(2).replace(".", ",");
    159.  
    160.  
    161.  
    162. frm.ekbetriebid.value               = (Number(ekbetriebid)).toFixed(2).replace(".", ",");
    163. frm.ekarenaid.value                 = (Number(ekarenaid)).toFixed(2).replace(".", ",");
    164. frm.rlszid.value                    = (Number(rlszid)).toFixed(2).replace(".", ",");
    165. frm.gukdid.value                    = (Number(gukdid)).toFixed(2).replace(".", ",");
    166. frm.voraussichtlichekostenid.value  = (Number(voraussichtlichekostenid)).toFixed(2).replace(".", ",");
    167. frm.verssumid.value                 = (Number(verssumid)).toFixed(2).replace(".", ",");
    168.  
    169.  
    170. }
    171.  
    172. if(schema == 20) {
    173.    
    174.  
    175. nachlassgwid = Number(ekbetriebid)-Number(gukdid)-Number(rlszid)-Number(ekarenaid);
    176.  
    177. vergleichzumindestvkid = Number(verkaufspreisid)-Number(mindestverkaufspreisid)-Number(nachlassgwid)-Number(bankid)-Number(geschrepkostenid)-Number(sonstigesid)-Number(zubehoerid)-Number(naturalrabattid)-Number(vermittlungsprovisionid)+praemiegesid;
    178.  
    179. frm.verkaufspreisid.value               = (Number(verkaufspreisid)).toFixed(2).replace(".", ",");
    180. frm.mindestverkaufspreisid.value        = (Number(mindestverkaufspreisid)).toFixed(2).replace(".", ",");
    181. frm.nachlassgwid.value                  = (Number(nachlassgwid)).toFixed(2).replace(".", ",");
    182. frm.nachlassgweid.value                 = frm.nachlassgwid.value;
    183. frm.bankid.value                        = (Number(bankid)).toFixed(2).replace(".", ",");
    184.  
    185. frm.inzpraemieid.value                  =(Number(inzpraemieid)).toFixed(2).replace(".", ",");
    186. frm.retpraemieid.value                  =(Number(retpraemieid)).toFixed(2).replace(".", ",");
    187. frm.erpraemieid.value                   =(Number(erpraemieid)).toFixed(2).replace(".", ",");
    188. frm.loypraemieid.value                  =(Number(loypraemieid)).toFixed(2).replace(".", ",");
    189. frm.zulpraemieid.value                  =(Number(zulpraemieid)).toFixed(2).replace(".", ",");
    190.  
    191. frm.praemiegesid.value                  =(Number(praemiegesid)).toFixed(2).replace(".", ",");
    192.  
    193. frm.praemiegesamtid.value               = frm.praemiegesid.value;
    194. frm.praemiegeshisid.value               =(Number(praemiegeshisid)).toFixed(2).replace(".", ",");
    195.  
    196. frm.mindestverkaufspreisid.value        = (Number(mindestverkaufspreisid)).toFixed(2).replace(".", ",");
    197. frm.sonstigesid.value                   = (Number(sonstigesid)).toFixed(2).replace(".", ",");
    198. frm.zubehoerid.value                    = (Number(zubehoerid)).toFixed(2).replace(".", ",");
    199. frm.naturalrabattid.value               = (Number(naturalrabattid)).toFixed(2).replace(".", ",");
    200. frm.vermittlungsprovisionid.value       = (Number(vermittlungsprovisionid)).toFixed(2).replace(".", ",");
    201. frm.geschrepkostenid.value              = (Number(geschrepkostenid)).toFixed(2).replace(".", ",");
    202.  
    203. frm.vergleichzumindestvkid.value        = (Number(vergleichzumindestvkid)).toFixed(2).replace(".", ",");
    204. frm.vergleichzumindestvk1id.value       = frm.vergleichzumindestvkid.value;
    205.  
    206. frm.ekbetriebid.value                   = (Number(ekbetriebid)).toFixed(2).replace(".", ",");
    207. frm.ekarenaid.value                     = (Number(ekarenaid)).toFixed(2).replace(".", ",");
    208. frm.rlszid.value                        = (Number(rlszid)).toFixed(2).replace(".", ",");
    209. frm.gukdid.value                        = (Number(gukdid)).toFixed(2).replace(".", ",");
    210. frm.voraussichtlichekostenid.value      = (Number(voraussichtlichekostenid)).toFixed(2).replace(".", ",");
    211. frm.verssumid.value                     = (Number(verssumid)).toFixed(2).replace(".", ",");
    212.  
    213.  
    214. }
    215.  
    216.  
    217.  
    218. Prov()
    219.  
    220. }
    221.  
    222.  
    223. function formular(ja,di,lt,sly,provsystemnw,provsystemgw) {
    224.    
    225.  
    226.    
    227. provsys         = sly;
    228. kalk            = ja;
    229. systemnw        = provsystemnw;
    230. systemgw        = provsystemgw;
    231. schema          = ja;
    232.  
    233.    
    234.     if ((ja == 20) || (ja == 30))  {   
    235.                        
    236.                             document.getElementById("mitte").style.display="block";
    237.                
    238.                             document.getElementById("nw_1").style.display="none";
    239.                             document.getElementById("nw_2").style.display="none";
    240.                             document.getElementById("nw_3").style.display="none";
    241.                             document.getElementById("nw_4").style.display="none";
    242.                            
    243.                             document.getElementById("gw_1").style.display="block";
    244.                             document.getElementById("gw_2").style.display="block";
    245.                             document.getElementById("gw_3").style.display="block";
    246.                             document.getElementById("gw_4").style.display="block";
    247.                              
    248.             praemien(ja)
    249.            
    250.          }
    251.                     else
    252.         {
    253.  
    254.     if(ja == 10) {
    255.    
    256.                             document.getElementById("mitte").style.display="block";
    257.                             document.getElementById("gw-daten").style.display="none";
    258.                            
    259.            
    260.                             document.getElementById("nw_1").style.display="block";
    261.                             document.getElementById("nw_2").style.display="block";
    262.                             document.getElementById("nw_3").style.display="block";
    263.                             document.getElementById("nw_4").style.display="block";
    264.                            
    265.                            
    266.                             document.getElementById("gw_1").style.display="none";
    267.                             document.getElementById("gw_2").style.display="none";
    268.                             document.getElementById("gw_3").style.display="none";
    269.                             document.getElementById("gw_4").style.display="none";
    270.                            
    271.                            
    272.  
    273.  
    274.     praemien(ja)
    275.    
    276.    
    277.     }
    278.     }
    279.     }
    280.  
    281.  
    282. function praemien(ja) { }
    283.  
    284.  
    285. function gw(ja) {
    286.    
    287.    
    288.  
    289.     if (ja ==100 ) {   
    290.    
    291.             document.getElementById("gw-daten").style.display="block";
    292.            
    293.             //document.getElementById("gwtypid").focus();
    294.  
    295.    
    296.   }
    297.   else
    298. {           // Inhalt des Formulars GW leeren
    299.            
    300.             document.getElementById("gwtypid").value="";
    301.             document.getElementById("fahrgestellnummerid").value="";
    302.             document.getElementById("kmstandid").value="";
    303.             document.getElementById("bjid").value="";
    304.            
    305.             document.form1.ankaufvonid.selectedIndex = 0;
    306.             document.form1.mwstausweisbarid.selectedIndex = 0;
    307.             document.form1.ruecknahmeverpflichtungid.selectedIndex = 0;
    308.            
    309.             document.getElementById("ekbetriebid").value="";
    310.             document.getElementById("ekarenaid").value="";
    311.             document.getElementById("bewertungnrschwackeid").value="";
    312.             document.getElementById("vertragsnummerid").value="";  
    313.             document.getElementById("rlszid").value="";
    314.             document.getElementById("rgankdid").value="";
    315.             document.getElementById("gukdid").value="";
    316.             document.getElementById("fahrzeugmaengelid").value="";
    317.             document.getElementById("voraussichtlichekostenid").value="";
    318.  
    319.             document.getElementById("gw-daten").style.display="none";
    320.  
    321.             doLiveRes()
    322.  
    323.  
    324. }
    325. }
    326. function num(id) {
    327.  
    328. var sa = document.getElementById(id).value.replace(",", ".");
    329.  
    330. document.getElementById(id).value   = (Number(sa)).toFixed(2).replace(".", ",");
    331.  
    332. }
    333.  
    334. function daten(err) {
    335.  
    336.  
    337.    
    338.     if(err != undefined) {
    339.        
    340.    
    341.     frm=document.form1;
    342.    
    343.     var betragnachin1               =  frm.betragnachid1.value.replace(",", ".");
    344.     var betragnachin2               =  frm.betragnachid2.value.replace(",", ".");
    345.     var betragnachin3               =  frm.betragnachid3.value.replace(",", ".");
    346.     var betragnachin4               =  frm.betragnachid4.value.replace(",", ".");
    347.     var betragnachin5               =  frm.betragnachid5.value.replace(",", ".");
    348.  
    349.     gesamt = Number(betragnachin1) + Number(betragnachin2) + Number(betragnachin3) + Number(betragnachin4) + Number(betragnachin5);
    350.    
    351.     form1.zubehoerid.value =  gesamt;
    352.    
    353.  
    354.  
    355.     }
    356. }
    Ich hoffe das war jetzt nicht zuviel! So funktioniert auch alles! Nur ich möchte den Code vereinfachen und werte über Arrays verwalten!

    Danke für deine Mühe!

    Darkpriest
  8. deepthroat

    deepthroat Premium-User

    Hi.

    Ja, es ist doch etwas viel und ein wenig unübersichtlich. Man kann sich das nicht zufällig "live" ansehen?

    Zuerst mal ist der Zugriff auf form1 über "document.form1" nicht zulässig. Siehe http://de.selfhtml.org/javascript/objekte/forms.htm#allgemeines

    Auf die Elemente einer form muss auch anders zugegriffen werden (http://de.selfhtml.org/javascript/objekte/elements.htm#allgemeines).

    Beim label hast du für das Attribut for den Wert "name" angegeben. Dort sollte die ID des Elements stehen für das das Label verantwortlich ist, also in dem Fall "neuwagenlpnettoid".

    Der Wert eines name Attributes sollte ausschließlich Buchstaben oder Ziffern, Unterstriche aber keien Leerzeichen, Umlaute oder sonstige Sonderzeichen enthalten.

    Dann hast du jetzt den funktionierenden Code gepostet. Das nützt ja nun aber nicht viel um den Fehler im neuen Code zu finden, oder?! Und könntest du bitte wirklich den HTML Code posten und nicht den PHP Code?

    Gruß
  9. darkpriest

    darkpriest Grünschnabel

    Hallo,

    leider kann man das nicht live ansehen! Läuft hier lokal im Intranet! Das Projekt ist leider sehr umfangreich u. der HTML-Code wird über PHP-Funktionen erstellt.

    Ich verstehe das mit dem Zugriff auf die Felder nicht, warum darf ich so nicht zugreifen! Es funktioniert doch! Oder liegt genau hier der Fehler?

    Ich möchte eigentlich nur den Code der Funktionen vereinfachen!

    Code (Text):
    1. //var variablen = new Array("neuwagenlpnettoid", "Feld2", "Feld3");
    Diese Felder möchte ich nun innerhalb der Funktion "doliveRes" deklarieren!

    Code (Text):
    1.  
    2.  
    3. var part1 ="frm.";
    4. var part3 =".value";
    5.  
    6. for (var i = 0; i < variablen.length; i++)
    7.  
    8.         {
    9.            
    10.             var document.forms["form1"].elements[variablen[i]].id = (document.forms["form1"].elements[variablen[i]].value.replace(",", "."));
    11.             alert(neuwagenlpnettoid);
    12.            
    13.         }
    14.  
    Bei dieser Anweisung bleibt er aber schon als fehlerhaft hängen und meldet "Objekt erwartet".

    Wenn ich aber die Variablen aber einzeln deklariere, bsp.

    var neuwagenlpnettoid = frm.neuwagenlpnettoid.value.replace(",", ".");

    funktioniert es, obwohl ich vom Ablauf in der selben Funktion bin!

    Danke!

    Darkpriest
  10. deepthroat

    deepthroat Premium-User

    Grundsätzlich ist es eine schlechte Idee eine Zugriffs-Methode zu verwenden die laut Standard gar nicht existiert. Für einfachen Code mag es noch funktionieren wenn der Browser sich noch "denken kann" was gemeint ist. Sonst ist es eine unnötige Fehlerquelle und einfach qualitativ minderwertiger Code.
    Wenn du auf ein Element namens "neuwagenlpnettoid" zugreifen willst, dann muss das Element aber auch diesen Namen haben. Dein Element heißt aber nicht "neuwagenlpnettoid" sondern "kalk[neuwagenlpnettoin]" (wobei name keine Leerzeichen und Umlaute enthalten sollte, erstes Zeichen ein Buchstabe, sonst auch Ziffern, Unterstrich (_), Bindestrich (-), Doppelpunkt :)) oder Punkt (.) bestehen sollte)

    Wenn jedes Element eine eindeutige ID hat, kannst du natürlich auch über die ID darauf zugreifen:
    Code (Javascript):
    1. document.getElementById(variablen[i]).value = ...;
    Gruß
  11. darkpriest

    darkpriest Grünschnabel

    Hallo,

    okay! dann habe ich einfach glück gehabt mit meinem Fehler, werde alles so umbauen!

    Ich habe allen Elementen eindeutige Id's zugeordnet. Damit kann ich doch nun so wie du gesagt hast auf meine Elemente zugreifen:

    Code (Text):
    1. document.getElementById(variablen[i]).value = ...;
    Meine Schleife durchläuft nun die einzelnen Array-Felder:

    feld 1 = "neuwagenlpnettoid";

    Nun möchte ich eine neue Variable aus dem Arrayfeld mit dem Namen erstellen.

    Mein Versuch:

    var variablen;

    schlägt leider fehl, mit der Fehlermeldung "Objekt erforderlich"!
    Ich will doch nur den String "neuwagenlpnettoid" als Variable mit dem Wert

    document.getElementById(neuwagenlpnettoid).value erstellen!

    Bitte kannst du mir helfen?

    Darkpriest
  12. deepthroat

    deepthroat Premium-User

    Hi.

    Wozu willst du das machen? Die Schleife sollte doch relativ generisch für alle Elemente aus dem Array sein. Man könnte eine Variable dynamisch mit der eval() erzeugen, aber wozu? Mach's doch einfach so:
    Code (Javascript):
    1. var array = new Array("abc", "def", /* ... usw */);
    2.  
    3. for (var i = 0; i < array.length; ++i) {
    4.   var e = document.getElementById(array[i]);
    5.  
    6.   // zur Sicherheit:
    7.   if (e != null)
    8.     e.value = e.value.replace(".", ",");
    9. }
    Gruß
    Zuletzt bearbeitet: 17. November 2007
  13. darkpriest

    darkpriest Grünschnabel

    Hallo,

    jetzt haben wir (du) es fast geschaft.

    Habe mal folgende Anpassung bei mir gemacht:

    Code (Text):
    1.  
    2. var variablen = new Array("neuwagenlpnettoid", "nachlassid");
    3.  
    4. for (var i = 0; i < variablen.length; i++)  {
    5.            
    6.                   var e = document.getElementById(variablen[i]);
    7.                
    8.                   e.value = e.value.replace(".", ",");
    9.                  
    10.                              }
    11.  
    12.  
    Wenn ich mir e nun mit alert ausgeben lasse, bekomme ich die meldung "Objekt". Ich möchte aber in meinem weiteren Script mit der Variablen "neuwagenlpnettoid" weiterrechnen, wie erstelle ich nun die Variable "neuwagenlpnettoid" !

    Der wert muß ja e.value sein!

    Danke!

    Darkpriest
  14. deepthroat

    deepthroat Premium-User

    Hi.

    Also wie gesagt ist das eigentlich unsinnig. Zumal es ein Sprachmittel gibt die Elemente einer Form direkt anzusprechen:
    Code (Javascript):
    1. with (document.forms.form1.elements) {
    2.   neuwagenlpnetto.value = neuwagenlpnetto.value.replace(".", ",");
    3.  
    4.   /* usw. */
    5. }
    Das setzt natürlich voraus, dass man die Elemente vernünftig benannt hat.

    Man könnte natürlich die IDs der Elemente nun wieder als globale Variablen zum window Objekt hinzufügen, aber das ist wirklich nicht zu empfehlen:
    Code (Javascript):
    1. for (var i = ... ) {
    2.   var e = document.getElementById(variablen[i]);
    3.  
    4.   window[variablen[i]] = e; // äußerst unschön.
    5. }
    Gruß
  15. darkpriest

    darkpriest Grünschnabel

    Hallo,

    jetzt habe ich es glaube ich verstanden!

    Mit der 1. Schleife erstelle ich Objekte (e)! Und wenn der Wert von e nicht null ist, kann ich mir in meinem Script diese Zeile sparen:

    var verkaufspreisid = frm.verkaufspreisid.value.replace(",", ".");

    Berechnungen kann ich durchführen in dem Construkt:

    with (document.forms.form1.elements) { }

    hier immer meine Feldbezeichnung aus dem Array aus Schleife 1 + .value!

    Werte an das Formular gebe ich mit:

    document.getElementById("neuwagenlpnettoid").value = 65000;

    zurück!

    Bin ich jetzt richtig unterwegs?

    Danke!
  16. deepthroat

    deepthroat Premium-User

    Hi.
    Wenn der Wert null ist - also das Objekt mit der ID nicht gefunden werden konnte, dann würde der Aufruf zu einem Fehler führen.
    Wie bereits gesagt: das würde nur funktionieren, wenn du für die Namen der Elemente valide Bezeichner gewählt hättest - was du aber nicht getan hast!

    Wenn du die zweite Möglichkeit aus meinem vorigen Beitrag wählst, dann könntest du von überall einfach auf alle Elemente deren ID im Array drin war als Variable zugreifen. Das würde ich aber nicht unbedingt empfehlen. Also jedenfalls würde ich es auf keinen Fall so machen...

    Gruß
  17. darkpriest

    darkpriest Grünschnabel

    Hallo,

    den Teil von deiner Antwort verstehe ich nicht, da ich doch für all meine Felder eindeutige Ids verwendet habe! Was meinst du da bitte?

    Danke

    Darkpriest
  18. deepthroat

    deepthroat Premium-User

    Hi.
    Ich sprach vom Namen den man mit dem name Attribut vergibt - im Gegensatz zur ID die man mit dem id Attribut verteilt. Das sind 2 völlig verschiedene Dinge. Beide sollten gültige Bezeichner sein - was du anscheinend nur bei der ID durchgehalten hast, für den Namen allerdings nicht. (Wobei ich nicht den HTML Code für die anderen Elemente gesehen habe...)

    Gruß
  19. darkpriest

    darkpriest Grünschnabel

    Hallo,

    möchte das für die Zukunft nur richtig machen, darum die Frage:

    Code (Text):
    1.      with (document.forms.form1.elements) {  
    2.         neuwagenlpnetto.value = neuwagenlpnetto.value.replace(".", ",");  
    3.     }
    4.  
    Der oben angeführte Codeschnipsel bezieht sich nur auf die NAMEN der Elemente oder verstehe ich das jetzt falsch? Also wäre in dem oben angeführten Beispiel:

    <input type="text" name="neuwagenlpnetto" usw.>

    Bezieht sich dann elements immer auf NAMEN?

    Ist der name kalk[test] möglich oder nicht?

    Danke für die große Mühe die du dir mit mir machst!

    Darkpriest
  20. deepthroat

    deepthroat Premium-User

    Hi.
    Ja.
    Ja, in dem element Objekt sind die einzelnen Formularelemente über den Namen zugreifbar. Siehe http://de.selfhtml.org/javascript/objekte/elements.htm#allgemeines
    Wozu soll denn dieser Name gut sein? Laut HTML ist der Name erlaubt, es empfiehlt sich aber generell - und insbesondere im Hinblick auf die Verarbeitung mit Javascript - Namen zu wählen die auch in Javascript valide Bezeichner sind. Folgendes kann mit dem Namen "kalk[test]" nicht funktionieren:
    Code (Javascript):
    1. with (document.forms.form1.elements) {  
    2.         kalk[test].value = kalk[test].value.replace(".", ",");
    3. }
    4.  
    Gruß

Diese Seite empfehlen