Liebe(r) keine_Ahnung,
eine korrektur ist sehr simpel:
window.onload = function() {
Das ist nicht gut, da Du damit andere Scripte eventuell abschießt. Besser:
SelectErweiterung = {
oldWinOnLoad : null, // Hier wird die alte onload-Funktion abgelegt werden.
init : function () {
this.oldWinOnLoad = window.onload;
window.onload = function () {
if (typeof (SelectErweiterung.oldWinOnLoad) == "function")
SelectErweiterung.oldWinOnLoad();
SelectErweiterung.erweitern();
}
},
erweitern : function() {
var alleSelects, i, s;
alleSelects = document.getElementsByTagName("select");
for (i = 0; i < alleSelects.length; i++) {
s = alleSelects[i];
> var other = new Option('Anderes …');
// gilt nicht mehr, da s jetzt in einer Schleife definiert wird! var s = document.getElementsByTagName('select')[0];
> s.options[s.options.length] = other; // Eintrag „Anderes …“ hinzufügen
>
> s.onchange = function() { // Aktion bei Änderung der Auswahl
>
> if (this.selectedIndex == (s.options.length - 1)) { // Bei Auswahl des letzte Elementes
>
> var i = document.createElement('input'); // Eingabefeld erstellen
> i.value = i.defaultValue = 'Anderes …'; // Wert und Standardwert festlegen
> i.onblur = function() { // Aktion beim Verlassen des Eingabefeldes
>
> if (i.value != i.defaultValue) { // Sollte ein neuer Wert eingegeben worden sein …
>
> --s.options.length; // Eintrag „Anderes …“ entfernen
> s.options[s.options.length] = new Option(i.value, i.value); // Neuen Wert hinzufügen
> s.options[s.options.length] = other; // Eintrag „Anderes …“ wieder hinzufügen
>
> /* Auswahl auf das soeben eingefügte Element setzen */
> s.selectedIndex = (s.options.length - 2);
>
> } else {
> /* Auswahl auf das erste Element setzen, da onchange bei
> erneuter Auswahl von „Anderes …“ sonst nicht aktiv wird */
> s.selectedIndex = 0;
> }
>
> s.style.display = ''; // Auswahlfeld wieder einblenden
> i.parentNode.removeChild(i); // Eingabefeld wieder entfernen
>
> };
>
> this.parentNode.insertBefore(i, this); // Eingabefeld vor Auswahlfeld einfügen
> this.style.display = 'none'; // Auswahlfeld ausblenden
> i.focus(); // Eingabefeld fokussieren
> i.select(); // Inhalt auswählen
>
> }
> };
> };
}
}
SelectErweiterung.init();
Habe das mal eben schnell heruntergeschrieben, aber nicht getestet!
Liebe Grüße aus Ellwangen,
Felix Riesterer.
--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)