Tobi-San: verkettete auswahlliste - javascript Problem

Hallo Leute

ich möchte das Javascript von Rodney gerne so abändern, dass man in der 3. Auswahlliste IMMER "nur" die gleiche Auswahlmöglichkeit hat! (bei mir wäre es jeweils eine Monatsauswahl von Jan. bis Dez.). Der Wert muss dabei auch übergeben werden - wie bei den anderen Listen.

Leider bekomme ich das alleine nicht hin und hoffe, dass mir hier jemand einen Tipp geben kann :-)

hier mal mein abgeänderter Code des Array's:

var zeigenAuswahl = {
  'marke' : {
  'alfa' : ['alfa', 'ALFA ROMEO'],
  'audi' : ['audi', 'AUDI'],
  'bmw' : ['bmw', 'BMW'],
  'chevrolet' : ['chevrolet', 'CHEVROLET'],
  'citroen' : ['citroen', 'CITROEN'],
  'chrysler' : ['chrysler', 'CHRYSLER'],
  'daewoo' : ['daewoo', 'DAEWOO'],
  'daihatsu' : ['daihatsu', 'DAIHATSU'],
  'fiat' : ['fiat', 'FIAT'],
  'ford' : ['ford', 'FORD'],
  'honda' : ['honda', 'HONDA'],
  'hyundai' : ['hyundai', 'HYUNDAI'],
  'jaguar' : ['jaguar', 'JAGUAR'],
  'kia' : ['kia', 'KIA'],
  'lancia' : ['lancia', 'LANCIA'],
  'landrover' : ['rover', 'LAND ROVER'],
  'mazda' : ['mazda', 'MAZDA'],
  'smart' : ['smart', 'Smart'],
  'mercedes' : ['mercedes', 'MERCEDES BENZ'],
  'mitsubishi' : ['mitsubishi', 'MITSUBISHI'],
  'nissan' : ['nissan', 'NISSAN'],
  'opel' : ['opel', 'OPEL'],
  'peugeot' : ['peugeot', 'PEUGEOT'],
  'renault' : ['renault', 'RENAULT'],
  'saab' : ['saab', 'SAAB'],
  'seat' : ['seat', 'SEAT'],
  'skoda' : ['skoda', 'SKODA'],
  'ssangyong' : ['ssangyong', 'SSANGYONG'],
  'subaru' : ['subaru', 'SUBARU'],
  'suzuki' : ['suzuki', 'SUZUKI'],
  'toyota' : ['toyota', 'TOYOTA'],
  'vw' : ['vw', 'VW'],
  'volvo' : ['volvo', 'VOLVO'],
  'universal' : ['universal', 'UNIVERSAL']
  },

'modell' : {
    'alfa' : [
      ['147', '147'],
      ['156 Limousine', '156 Limousine'],
      ['156 Sportwagon', '156 Sportwagon'],
      ['156 Crosswagon', '156 Crosswagon'],
      ['159 Limousine', '159 Limousine'],
      ['159 Sportwagon', '159 Sportwagon'],
      ['166', '166'],
    ],

'audi' : [
      ['A3', 'A3'],
      ['A3 Sportback', 'A3 Sportback'],
      ['A4 Limousine', 'A4 Limousine'],
      ['A4 Avant', 'A4 Avant'],
      ['A4 Cabriolet', 'A4 Cabriolet'],
      ['A6/100 (C4) Limousine', 'A6/100 (C4) Limousine'],
      ['A6/100 (C4) Avant', 'A6/100 (C4) Avant'],
      ['A6 (C5) Limousine', 'A6 (C5) Limousine'],
      ['A6 (C5) Avant', 'A6 (C5) Avant'],
      ['A6 (C6) Limousine', 'A6 (C6) Limousine'],
      ['A6 (C6) Avant', 'A6 (C6) Avant'],
      ['Allroad Quatro', 'Allroad Quatro'],
      ['Q7', 'Q7']
    ],
                     //wird noch angepasst!
    'bmw' : [
      ['l75', 'Wirtschaftskram I'],
      ['l76', 'Wirtschaftskram II'],
      ['l76', 'Wirtschaftskram III']
    ],

'chevrolet' : [
      ['l85', 'Technologie in der Steinzeit'],
      ['l86', 'Technologie in der Bronzezeit'],
      ['l86', 'Technologie heute']
    ],

'citroen' : [
      ['l95', 'Althochdeutsch'],
      ['l96', 'Mittelhochdeutsch'],
      ['l96', 'Deutsch f¸r Angefangene']
    ]
  },
                          ab hier soll der Monat für alle auswählbar sein!
  'baujahr' : {
   'modell' : ['januar', 'Januar',],
                  ['februar', 'Februar',],
   usw.
  }
};

kann mir da jemand helfen???

  1. hi,

    ich möchte das Javascript von Rodney gerne so abändern, dass man in der 3. Auswahlliste IMMER "nur" die gleiche Auswahlmöglichkeit hat! (bei mir wäre es jeweils eine Monatsauswahl von Jan. bis Dez.). Der Wert muss dabei auch übergeben werden - wie bei den anderen Listen.

    Die Marke hast du über ihre Eigenschaften mit dem Modell verbunden.

    Eine Verbindung zwischen Modell und Baujahr scheint nicht zu bestehen, richtig?

    Dann stelle auch nicht künstlich eine her - sondern lasse das dritte Selectfeld aus der Verkettung heraus.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo

      das schöne daran ist ja, dass die Werte auch übergeben werden!

      Ich möchte damit dann einen SQL-Select-Befehl generieren lassen und mit php aus einer Datenbank die Ergebnisse darstellen...

  2. n'abend,

    ich möchte das Javascript von Rodney gerne so abändern, dass man in der 3. Auswahlliste IMMER "nur" die gleiche Auswahlmöglichkeit hat! (bei mir wäre es jeweils eine Monatsauswahl von Jan. bis Dez.). Der Wert muss dabei auch übergeben werden - wie bei den anderen Listen.

    sofern ich dein Anliegen verstanden habe, sollen (in deinem Fall) lediglich die erstem beiden Auswahllisten aus dem Datenspeicher (Optionsdaten) gefüllt werden. Die letzte Auswahlliste soll immer eine Auswahl der Monate ermöglichen, unabhängig von den zuvor gewählten Optionen.

    Von Haus aus bietet das LinkedSelection-Objekt eine derartige Vorgehensweise nicht. Man kann das aber sehr wohl "nachfrickeln".

    Für die Befüllung der nachfolgenden Auswahlliste ist grundsätzlich der ChangeHandler zuständig. Diesen müssen wir abändern, damit bei einer neuen Auswahl in der vorletzten Auswahlliste die neuen Optionen für die letzte Auswahlliste nicht aus dem Datenspeicher gelesen werden. Das könnten wir in etwa so hinbekommen:

    var changeHandler = function()  
      {  
        var value = this.selectedValue();  
      
        // Auf die nächste Auswahlliste folgende Auswahllisten müssen wieder  
        // in den default-Zustand versetzt werden  
        if( typeof(this.nextSelect) == 'object' )  
        {  
          for( var i = this.nextSelect.selectID + 1; i < selects.length; i++ )  
            selects[i].replaceOptions( new Array() );  
        }  
      
        // Abbrechen, wenn ein Dummy-Wert ausgewählt wurde  
        if( value == '--' )  
        {  
          if( this.selectID < selects.length )  
            selects[ this.selectID +1 ].replaceOptions( new Array() );  
      
          return;  
        }  
      
        if( typeof(this.nextSelect) == 'object' )  
        {  
          /*  
           * nextSelect ist eine Auswahlliste  
           */  
      
          // prüfe ob wir bei der vorletzten Auswahlliste angelangt sind <--- In diesem Block sind die Änderungen passiert.  
          if( this.nextSelect.id == selects[ selects.length -1 ].id )  
          {  
           var monthdata = [ ['Jan','Januar'], ['Feb', 'Februar'], ['Mar', 'März'], ['Apr', 'April'] ];  
            this.nextSelect.replaceOptions( monthdata );  
          }  
          else  
          {  
         // Wenn keine Daten zur gemachten Auswahl zur Verfügung stehen,  
         // müssen wir sicherstellen, dass wir auf keine nicht vorhandenen Objekte zugreifen.  
         if( !data[ this.nextSelect.id ][ value ] )  
         {  
           if( !data[ this.nextSelect.id ] )  
             data[ this.nextSelect.id ] = {};  
      
           data[ this.nextSelect.id ][ value ] = new Array();  
         }  
      
         // Neue Optionen in der nächsten Auswahlliste setzen  
         this.nextSelect.replaceOptions( data[ this.nextSelect.id ][ value ] );  
          }  
      
          // Wenn die Auswahlstrecke nicht beendet ist, muss die Callback-Funktion  
          // dennoch aufgerufen werden, damit entsprechend auf Änderungen  
          // reagiert werden kann.  
          callback( new Array() );  
        }  
        else  
        {  
          /*  
           * Die Auswahlstrecke ist absolviert  
           */  
      
          // Wahlen der einzelnen Listen in ein Array schreiben um  
          // dieses an die Callback-Funktion zu übergeben.  
          var selected = new Array();  
          for( var i = 0; i < selects.length; i++ )  
          {  
            selected.push( { 'id' : selects[i].id,  
                     'value': selects[i].selectedValue(),  
                     'text' : selects[i].selectedText() } );  
          }  
          callback( selected );  
        }  
      };
    

    Dass dies nur ein "Quick-Hack" ist, versteht sich von selbst. Eigentlich würde man das gerne generischer lösen.

    weiterhin schönen abend...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|