ich wollte eine Verkettete Auswahlliste ihr einfügen i-wie klappt das nicht
Code wo ich es einbinden will
<!--@title=Downloads@--><!--@hmenu=Anleitungen@--><!--@view=normal@--><!--@viewoptions=@--><!--@wysiwyg=1@--><style>
a:hover { color:#09C; text-decoration:underline; }
</style>
<?php
defined ('main') or die ('no direct access');
if(loggedin()) {
echo 'DU BIST ANGEMELDET';
} else {
echo '<font color="#00FF00"><font size="2"><div style="margin-left:16%;display-inline;">
<br><br><br><br><br><br><font color="#ccc"> <font size="3"><strong><div style="margin-left:28%;display-inline;">Anleitungen</div></strong></font></font><br>Die Anleitungen sind nur für Registrierte Benutzer gedacht.<br>
<br>
Bitte registrieren sie sich um die Anleitungen sehen zu können.<br>
<br>
Oder loggen sie sich mit ihrem Benutzername und Passwort ein.</div></font></font>
<br>
}
?>
Verkettete Auswahlliste
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Beispiel 1</title>
<script type="text/javascript" src="terminAuswahl.js"></script>
<script type="text/javascript" src="LinkedSelection.js"></script>
<script type="text/javascript">
/**
* Diese Callback-Funktion soll beim Abschliessen der Auswahlstrecke und beim
* Ändern der Auswahl in einer der Auswahllisten aufgerufen werden.
* @param selected ein Array mit den Daten der jeweiligen Auswahllisten
* (leer, wenn Strecke nicht abgeschlossen)
**/
function ergebnisZeigen( selected )
{
if( selected.length )
{
/*
* Auswahlstrecke wurde beendet
*/
// Visualisierung der Auswahlsrecke
var sel = '';
var val = '';
var txt = '';
for( var i = 0; i < selected.length; i++ )
{
sel += ( i>0 ? ' ' : '') + selected[i].id;
val += ( i>0 ? ' ' : '') + selected[i].value;
txt += ( i>0 ? ' ' : '') + selected[i].text;
}
var output = '<h4>Info:<'+'/h4><p>' + val +
'<'+'/p>';
}
else
{
/*
* Auswahlstrecke wurde noch nicht beendet
*/
// Hinweis zur Auswahl in der nächsten Auswahlliste
var output = '<p>Wählen Sie eine Option aus der nächste Auswahlliste.<'+'/p>';
}
var ergebnisObj = document.getElementById( 'ergebnis' ).innerHTML = output;
};
window.onload = function()
{
var vk = new LinkedSelection( [ 'professor', 'lesung', 'termin' ], ergebnisZeigen, terminAuswahl );
}
var terminAuswahl = {
'professor' : {
'p23' : ['', 'Albers, Alfred'],
'p24' : ['p24', 'Braun, Berta'],
'p25' : ['p25', 'Drachenzaun, Doris'],
'p26' : ['p26', 'Müller, Stephan'],
'p27' : ['p27', 'Meier, Manfred']
},
'lesung' : {
' ' : [
['sdsdsddsdsdsdddsd', 'OS X Lion'],
['l56', 'OS Snow Leopard'],
['l56', 'IOS Jailbreak']
],
'p24' : [
['l65', 'Linux'],
],
'p25' : [
['l75', 'Windows 95'],
['l76', 'Windows 98'],
['l77', 'Windows ME'],
['l78', 'Windows NT'],
['l79', 'Windows 2000'],
['l80', 'Windows 2003'],
['l81', 'Windows XP'],
['l82', 'Windows Vista'],
['l83', 'Windows 7'],
['l84', 'Windows 8']
],
},
};
/**
* LinkedSelection ist ein Klasse zur Steuerung dynamisch verketteter Auswahllisten
* @param inputSelects ein Array mit den IDs der Auswahllisten in hierarchischer Reihenfolge
* Bsp: [ 'select1', 'select2', 'select3' ]
* @param callback Funktion, welche beim Abschließen (und Ändern) der Auswahl aufgerufen werden soll
* @param data das Daten-Objekt in JSON
* Bsp: { 'select1':['wert1','text1'], 'select2':['wert5','text5'] }
**/
function LinkedSelection( inputSelects, callback, data )
{
var self = this; /* um aus EventHandlern auf diese Instanz zugreifen zu können */
var selects = new Array(); /* Liste der verketteten Auswahllisten */
/**
* Die Funktion changeHandler wird dem onchange-Handler jeder Auswahlliste zugewiesen.
* Wenn eine gültige Auswahl getroffen wurde, soll entweder die als nächste
* Auswahlliste (nextSelect) bekannte Auswahlliste mit Daten befüllt werden,
* oder die Callback-Funktion ausgeführt werden.
**/
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
*/
// 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 );
}
};
/**
* replaceOptions ersetzt die aktuellen Optionen der Auswahlliste durch
* die im Array newOptions gelieferten Daten. Wenn ein leeres Array übergeben
* wird, wird die default-Option "--" gesetzt.
* @param newOptions ein Array mit den neuen Optionen
* Bsp: [ ['value1','text1'], ['value2','text2'], ]
**/
var replaceOptions = function( newOptions )
{
/*
* Diese Funktion setzt bewusst DOM-Methoden ein und verzichtet
* auf die vom Options-Objekt gegebenen Möglichkeiten.
*/
// alte Optionen der Auswahlliste löschen
var opts = this.getElementsByTagName( 'option' );
while( opts.length > 0 )
this.removeChild( opts[0] );
// wenn keine neuen Optionen übergeben wurden, default-Option setzen
// andernfalls "Bitte wählen" voranstellen
if( newOptions.length == 0)
this.addOption( '--', '------' );
else
this.addOption( '--', 'Bitte wählen:' );
// neue Optionen in die Auswahlliste schreiben
for( var i = 0; i < newOptions.length; i++ )
this.addOption( newOptions[i][0], newOptions[i][1] );
};
/*
* Fügt der Auswahlliste eine neue Option hinzu
* @param value Wert der neuen Option
* @param text Name der neuen Option
*/
var addOption = function( value, text )
{
var opt = document.createElement( 'option' );
opt.value = value;
opt.appendChild( document.createTextNode( text ) );
this.appendChild( opt );
};
/**
* holt den Wert der aktuell gewählten Option
* @returns den Value der aktuell gewählten Option
**/
var selectedValue = function()
{
return this.options[ this.selectedIndex ].value;
};
/**
* holt den Text (Name) der aktuell gewählten Option
* @returns den Text der aktuell gewählten Option
**/
var selectedText = function()
{
return this.options[ this.selectedIndex ].text;
};
/**
* Selektiere die Option mit dem Wert value, wenn keine Option mit dem Wert
* value existiert, wird die Auswahl nicht geändert.
* @param value der Wert den eine Option haben muss, um ausgewählt zu werden.
**/
var selectByValue = function( value )
{
for( var i = 0; i < this.options.length; i++ )
{
if( this.options[i].value == value )
this.selectedIndex = i;
}
}
/**
* Initialisiere den Manager für verkettete Auswahllisten.
* Findet Auswahllisten anhand der (per inputSelects) bekannten IDs.
* Bestückt die Auswahllisten mit den nötigen Funktionen und Event-Handlern
**/
this.init = function()
{
// bestücke bestehende selects
for( var i = 0; i < inputSelects.length; i++ )
{
var t = document.getElementById( inputSelects[i] );
// ignoriere falsche IDs
if(!t)
continue;
// neue Funktionen und Event-Handler zuweisen und in selects registrieren
t.replaceOptions = replaceOptions;
t.addOption = addOption;
t.selectedValue = selectedValue;
t.selectedText = selectedText;
t.selectByValue = selectByValue;
t.selectID = selects.length;
t.onchange = changeHandler;
selects.push( t );
// registriere Auswahlliste als nextSelect bei der vorhergehenden
if( selects.length > 1 )
selects[ selects.length-2 ].nextSelect = t;
}
};
// initialisieren!
this.init();
}
</script>
</head>
<body>
<h1>Beispiel 1</h1>
<p>Bitte wählen Sie in der folgenden Auswahlliste eine Betriebssytem</p>
<p>
<label id="professorLabel" for="professor">Hersteller</label>
<select id="professor">
<option value="--">Hersteller wählen:</option>
<option value=" ">Apple</option>
<option value="p24">Linux</option>
<option value="p25">Windows</option>
</select>
<label id="lesungLabel" for="lesung">Betriebssystem:</label>
<select id="lesung">
<option value="--">------</option>
</select>
</p>
<div id="ergebnis"></div>
</body>
</html>

