Toon posts:

grote selectbox met zoekfunctie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een select boxje met daarin zo'n 25.000 elementen. Nou is het natuurlijk niet handig om daar zelf een in op te moeten zoeken, dus heb ik maar de volgende zoekfunctie gemaakt die doormiddel van een formulier, een select en een tekstvak gaat zoeken.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    function zoek(formname, selectname, textname)
    {
        eval("var selectbox = document."+formname+"."+selectname+";");
        eval("var textbox = document."+formname+"."+textname+";");
        var zoek = new RegExp("^"+textbox.value,'i');
        for ( var i = 0; i < selectbox.options.length; i ++ )
        {
           if (selectbox.options[i].innerHTML.match(zoek))
             {
              selectbox.options[i].selected = true;
                    break;
             }
        }
    }


maar nu heb ik alleen het probleem dat het VEEL te lang duurt.
weet iemand misschien een snellere manier??

[ Voor 10% gewijzigd door Verwijderd op 09-01-2004 15:15 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:52
Javascript hoort niet thuis in P&W, maar in W&G. Dit kan je in de forumdescriptions lezen.

Daarnaast kan je ook code-tags gebruiken om je code te formatten, en je post zo duidelijker te maken.
P&W -> W&G

https://fgheysels.github.io/


Verwijderd

Topicstarter
Oke...leek mij meer scripten dan design....

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Probeer het eens zonder regular expression. Dus gewoon de string-waarde vergelijken.

JavaScript:
1
if (selectbox.options[i].text.toLowerCase() == zoek.toLowerCase())

Als je niet op de volledige string wil controleren kan je natuurlijk op een substring van de option-text matchen.

[ Voor 84% gewijzigd door Annie op 09-01-2004 17:44 . Reden: bugje in code :'( ]

Today's subliminal thought is:


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:12

crisp

Devver

Pixelated

een paar tips:

1) ditch die ranzige evals (juk!)
2) gebruik idd een string functie in dit geval ipv die regexp
3) in je for-loop vraag je nu elke iteratie weer de length property uit terwijl die niet veranderd gedurende de loop
4) vraag inderdaad de text property uit ipv de innerHTML

dan krijg je zoiets:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function zoek(formname, selectname, textname) {

  var text = document.forms[formname].elements[textname].value.toLowerCase();
  var k = text.length

  var options = document.forms[formname].elements[selectname].options;
  var j = options.length;

  for (var i = 0; i < j; i++) {

    if (options[i].text.substr(0,k).toLowerCase() == text) {
      options[i].selected = true;
      break;
    }

  }

}

Intentionally left blank


Verwijderd

Topicstarter
thnx, ik ga het eens proberen!

edit:
das idd een stuk sneller! :D

[ Voor 40% gewijzigd door Verwijderd op 12-01-2004 13:22 ]

Pagina: 1