Felix Riesterer: DropDown mit eigener Angabe

Beitrag lesen

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:)