tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
404
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    nick_beat20 nick_beat20 ist offline Mitglied
    Registriert seit
    Oct 2008
    Beiträge
    18
    Guten Tag,
    ich bin gerade dabei, ein kleines Rechnungsprogramm zu schreiben. Kurz zur Situation:

    Die Seite "Neue Rechnung schreiben" wird aufgerufen.

    Neben Daten wie Adresse etc., hat der Benutzer vier Oberkategorien zur Verfügung.

    Klickt man in einer Kategorie auf den Link "Artikel hinzufügen", blende ich einen Div mit den Artikeln zu der Kategorie ein.

    Mit Klick auf einen Artikel, werden in einen Div zwei Formularfelder (Anzahl + Preis) hinzugefügt.

    Ich möchte aber nun, dass ich in dem Div wo die Artikel hinzugefügt werden, ein Eingabefeld habe, wo ich einen festen Preis eingeben kann.

    Dieser sollte dann bei allen eingefügten Preisfelder als value eingesetzt werden.


    Hier ist mein Script, womit ich die Felder in den Div einfüge:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
                            var RowID = 0;
                        
                            function AddRow(part_id,cat_id,part_beschreibung,kategorie) {
                            RowID++;
                            
                            var label = new Element('label', {'for': part_id + 'anzahl', 'style': 'display: block; width: 300px; height: 18px; float: left; line-height: 18px; padding-left: 5px; margin-right: 15px; background-color: #999999;'}).update(part_beschreibung);
                            var input_partid = new Element('input', {'type': 'hidden','value': '' + part_id + '','id': part_id + 'partid','name': 'row['+part_id+'][partid]'});
                            var input_catid = new Element('input', {'type': 'hidden','value': '' + cat_id + '','id': cat_id + 'partid','name': 'row['+part_id+'][catid]'});
                            var input_anzahl = new Element('input', {'type': 'text','id': part_id + 'anzahl','name': 'row['+part_id+'][anzahl]'});
                            var input_preis = new Element('input', {'type': 'text','id': part_id + 'preis','name': 'row['+part_id+'][preis]'});
                            var remove_link = new Element('a', { 'class': 'foo', href: '#', onclick: 'RemoveRow(' + RowID + ')' }).update("entfernen");
                            
                            var a = new Element('div', { 'id': 'feld' + RowID + '' })
                            
                            $('Posten' + kategorie + 'List').insert ({'bottom' : a });
                            
                            $('feld' + RowID).writeAttribute("style","border-top: 1px #999999 dotted; padding-top: 15px; padding-bottom: 15px;");
                            
                            $('feld' + RowID).insert ({'bottom' : label });
                            $('feld' + RowID).insert ({'bottom' : input_partid });
                            $('feld' + RowID).insert ({'bottom' : input_catid });
                            $('feld' + RowID).insert ({'bottom' : input_anzahl });
                            $('feld' + RowID).insert ({'bottom' : input_preis });
                            $('feld' + RowID).insert ({'bottom' : remove_link });
     
                            $(part_id + 'anzahl').writeAttribute("style","border: 1px #669900 solid; margin-right: 15px; width: 30px;");
     
                            $(part_id + 'preis').writeAttribute("style","border: 1px #669900 solid; margin-right: 15px;");
            
                            }


    Und so sieht der Container aus, wo die Artikellinks drin sind:

    HTML-Code:
    <div id="PostenauswahlArbeitslohnDiv" style="z-index: 999; display: none; padding: 5px; width: 200px; min-height: 200px; border: solid #666666 1px; background-color: #cccccc; position: fixed; left: 50%; top: 50%; margin-left: -150px; margin-top: -100px;">
    
    	<a href="#" class="AuswahlmenuBold" onclick="ShowPartDiv(0,'arbeitslohn'); return false;"><span class="AuswahlmenuBold">Unterkategorie 1</span></a><br />
    		
    		<div id="div_arbeitslohn_0" style="display:none;">
    		
    			<a href="#" class="AuswahlmenuSub" onclick="AddRow(1,1,'Arbeitslohn 1','Arbeitslohn')"><span class="AuswahlmenuSub">Arbeitslohn 1</span></a><br />
    			<a href="#" class="AuswahlmenuSub" onclick="AddRow(2,1,'Arbeitslohn 2','Arbeitslohn')"><span class="AuswahlmenuSub">Arbeitslohn 2</span></a><br />
    			<a href="#" class="AuswahlmenuSub" onclick="AddRow(3,1,'Arbeitslohn 3','Arbeitslohn')"><span class="AuswahlmenuSub">Arbeitslohn 3</span></a><br />
    		
    		</div>
    		
    	<a href="#" class="AuswahlmenuBold" onclick="ShowPartDiv(1,'arbeitslohn'); return false;"><span class="AuswahlmenuBold">Unterkategorie 2</span></a><br />
    	
    		<div id="div_arbeitslohn_1" style="display:none;"><a href="#" class="AuswahlmenuSub" onclick="AddRow(4,1,'Arbeitslohn 4','Arbeitslohn')"><span class="AuswahlmenuSub">Arbeitslohn 4</span></a><br />
    		
    			<a href="#" class="AuswahlmenuSub" onclick="AddRow(5,1,'Arbeitslohn 5','Arbeitslohn')"><span class="AuswahlmenuSub">Arbeitslohn 5</span></a><br />
    			<a href="#" class="AuswahlmenuSub" onclick="AddRow(6,1,'Arbeitslohn 6','Arbeitslohn')"><span class="AuswahlmenuSub">Arbeitslohn 6</span></a><br />
    			<a href="#" class="AuswahlmenuSub" onclick="AddRow(7,1,'Arbeitslohn 7','Arbeitslohn')"><span class="AuswahlmenuSub">Arbeitslohn 7</span></a><br />
    			
    		</div>								
    						
    	<hr noshade width="100%" size="1" color="#669900" style="margin-top: 5px; margin-bottom: 5px;">	
    								
    		<input type="text" id="PreisArbeitslohn" size="24" style="border: 1px #669900 solid; width:100px;">
    
    		<a href="javascript:void(0);" onclick="document.getElementById('PostenauswahlArbeitslohnDiv').style.display='none';">Fertig</a>
    				
    </div>
    Ich hoffe ihr versteht was ich meine und könnt mir einen Tipp geben.

    Danke

    Gruß Sven
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin Sven,

    ich glaube, es wäre hilfreich, wenn du mal eine bis dahin funktionierende Demo bereitstellst, aus den Codeschnipsel inkl. deiner Erläuterung lässt sich nur schwer erkennen, was du da vorhast.
     

  3. #3
    nick_beat20 nick_beat20 ist offline Mitglied
    Registriert seit
    Oct 2008
    Beiträge
    18
    Hallo Sven,
    zwar sehr spät aber jetzt endlich habe ich wieder die Zeit um mich darum zu kümmern.
    Unter dem folgenden Link kannst du eine Demo runterladen.

    Kurze Erläuterung. Der Div der geöffnet ist, listet später alle verfügbaren Kategorien auf. Mit Klick auf eine Kat, werden alle Positionen der Kat angezeigt. Klickt man eine Position an, wird sie direkt ins Rechnungsformular übernommen.

    Unter den Kategorien ist ein Textfeld. Das Feld soll als Pflichtfeld definiert sein. Dementsprechend soll sich der Kat-Div nicht schließen lassen, bevor ein Wert in das Feld eingetragen ist. Das bekomme ich hin.

    Ich bekomme es einfach nicht hin, dass wenn ich in das Textfeld einen Wert eintrage, dieser automatisch in die vorher eingefügten Formularfelder eingetragen wird. Er muss ich das rechte Textfeld rein, da dort der Preis steht.

    Verstehst du wie ich das meine? Wenn nicht fertige ich eine Skizze an

    Danke schonmal.

    Gruß Sven

    http://www.schnettler.biz/DEMO.zip
    Geändert von nick_beat20 (06.09.10 um 10:03 Uhr) Grund: Was vergessen^
     

  4. #4
    scrippi scrippi ist offline Mitglied
    Registriert seit
    Oct 2008
    Beiträge
    13
    Hallo,

    also ich würde grundsätzlich in dem Sinne die document.createElement() benutzen, hatte bei mir bisher noch nie Probleme gemacht. Dadurch kannst du dann zB.: ohne zusätzlich über eine ID gehend auf das DOM Objekt zu greifen. Ich erkläre mal eben was ich meine. Du kannst entweder:
    Code :
    1
    2
    3
    
    var input = document.createElement("input");
    input.id("keks");
    $("#keks");

    machen, oder aber direkt statt $("#keks"), $(input) machen, damit sparste sogar bisschen an JavaScript arbeit

    Was deine Frage angeht, gibt es dafür 2 Wege. Entweder du machst: input.value = "dein wert" oder in $(input).attr("value","dein wert");
    beides sollte reibungsfrei funktionieren.
     

  5. #5
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Naja, ob man es nun mit createElement() oder mit der PrototypeJS-Methode macht, ist eigentlich egal.
    Die Methode von PrototypeJS bietet ja doch einges an Ersprnis beim Schreibaufwand, wenn man viele Attribute hinzufügen will.

    Ich nehme mal an, das Hauptproblem liegt beim Auslesen des Wertes des richtigen Inputs.

    Die Zeile, wo der Wert benötigt wird, ist ja jene:
    Code :
    1
    
    var input_preis = new Element('input', {'type': 'text','id': part_id + 'preis','name': 'row['+part_id+'][preis]'});

    Wie kommt man nun an den Wert?

    Angenommen, die ID des Textfeldes setzt sich immer zusammen aus "Preis" und dem Kategorie-Namen(im Beispiel also PreisArbeitslohn)...dann hätte man etwas, womit man den Wert auslesen könnte:
    Code :
    1
    
    $('Preis'+kategorie).value

    Summa Summarum:
    Code :
    1
    
    var input_preis = new Element('input', {'value':$('Preis'+kategorie).value,'type': 'text','id': part_id + 'preis','name': 'row['+part_id+'][preis]'});
     

  6. #6
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.451
    Hi,

    wenn der Wert immer in das letzte Textfeld des zuletzt zugefügten DIVs soll, könntest du es wie folgt versuchen:
    Code :
    1
    
    <input type="text" id="PreisArbeitslohn" onkeyup="$$('div[id^=\'feld\']:last-child input').last().value = this.value;" size="24" style="border: 1px #669900 solid; width:100px;">
    Ciao
    Quaese
     
    Vielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
    ----
    Der "Fortsetzungsroman" auf www.leuteforum.de

    New kind to realize large scalable projects with jQuery: jQuery SDK

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 24.03.10, 15:16
  2. Dynamisch erstellten Button Code zuweisen
    Von Rene42 im Forum .NET Windows Forms
    Antworten: 1
    Letzter Beitrag: 25.09.09, 09:18
  3. Größe dynamisch zuweisen
    Von Bunny1502 im Forum Flash Plattform
    Antworten: 7
    Letzter Beitrag: 22.11.06, 11:31
  4. Antworten: 2
    Letzter Beitrag: 04.08.05, 12:56
  5. Antworten: 7
    Letzter Beitrag: 03.08.05, 15:24