mrlaffer: Select-Box

Guten Tag,

Ich habe zurzeit zwei <select> boxen, welche wie folgt aufgebaut sind:

<form name="MeineForm">
<select name="OrtVon" size="7" style="width: 100%;" ondblclick="javascript:Move('SpoSearchForm', 'OrtVon', 'OrtAn', document.forms['MeineForm'].elements['OrtVon'].selectedIndex);">
    <option value="1">Luzern</option>
    <option value="2">Z&uuml;rich</option>
</select>
<select name="OrtAn" size="7" style="width: 100%;" ondblclick="javascript:Move('SpoSearchForm', 'OrtAn', 'OrtVon', document.forms['MeineForm'].elements['OrtVon'].selectedIndex);">
</select>
</form>

Es können jeweils mit einem Double-Klick die einzelnen Werte von "OrtVon" nach "OrtAn" und umgekehrt verschoben werden.

Beim Verschieben der Werte von "OrtVon" nach "OrtAn" muss ich die Werte im Feld "OrtAn" anschliessend mit folgendem Skript alphabetisch sortieren:

/**
* @desc Sortiert eine Selectliste nach Alphabet
*
* @param string SpoForm
* @param string SpoElement
* @return void
*/
function SpoElementSortlist(SpoForm, SpoElement) {
    try{
        var obj = document.getElementById(SpoElement);
        var values = new Array();
        for(var i = 0; i < obj.options.length; i++) {
            values.push(obj.options[i].innerHTML + "--xx--" + obj.options[i].value);
        }

values = values.sort();

for(var i = 0; i < values.length; i++) {
         valueArray = values[i].split('--xx--');
         obj.options[i].innerHTML = valueArray[0];
         obj.options[i].value = valueArray[1];
     }
    }
    catch(e){
        //alert('Fehler: ' + SpoElement);
    }
}

Leider ist dies nicht performant genug, da es unter umständen tausende von Einträgen geben kann.

Habt ihr eine schnellere oder einfachere Lösung?

Grüsse

Julien

  1. Was bitte hat "javascript:" in einem Event-Aufruf zu suchen?

    Gruß, LX

    --
    X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: Unusual
    X-Please-Search-Archive-First: Absolutely Yes
    1. Lol das hat jetzt wirklich nichts mit dem Performanceproblem zu tun.

      Was bitte hat "javascript:" in einem Event-Aufruf zu suchen?

      Gruß, LX

  2. Hi,

    Es können jeweils mit einem Double-Klick die einzelnen Werte von "OrtVon" nach "OrtAn" und umgekehrt verschoben werden.

    Beim Verschieben der Werte von "OrtVon" nach "OrtAn" muss ich die Werte im Feld "OrtAn" anschliessend mit folgendem Skript alphabetisch sortieren:
    ...
    Leider ist dies nicht performant genug, da es unter umständen tausende von Einträgen geben kann.

    Na ja, bei der Methode, Zusammensetzen, in Array speichern, Array sortieren, wieder auseinandernehmen, Select neu aufbauen - da kannst du auch kein allzu performantes Verhalten erwarten.

    Die "neue" Option gleich an der "richtigen" Stelle einzufuegen, sollte etwas performanter moeglich sein. (Ob alle Browser das richtig umsetzen, wenn man die Option mittels insertBefore umhaengt, muesste aber getestet werden.)

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Besten Dank für die schnelle Antwort.

      Dein Lösungsvorschlag hat mich auf eine neue Idee gebracht, womit ich das Problem beheben kann.

      Grüsse Julien

      Hi,

      Es können jeweils mit einem Double-Klick die einzelnen Werte von "OrtVon" nach "OrtAn" und umgekehrt verschoben werden.

      Beim Verschieben der Werte von "OrtVon" nach "OrtAn" muss ich die Werte im Feld "OrtAn" anschliessend mit folgendem Skript alphabetisch sortieren:
      ...
      Leider ist dies nicht performant genug, da es unter umständen tausende von Einträgen geben kann.

      Na ja, bei der Methode, Zusammensetzen, in Array speichern, Array sortieren, wieder auseinandernehmen, Select neu aufbauen - da kannst du auch kein allzu performantes Verhalten erwarten.

      Die "neue" Option gleich an der "richtigen" Stelle einzufuegen, sollte etwas performanter moeglich sein. (Ob alle Browser das richtig umsetzen, wenn man die Option mittels insertBefore umhaengt, muesste aber getestet werden.)

      MfG ChrisB