Ik ben voor mijn werk bezig met een pagina die een selectlist filtered door de hele lijst te doorzoeken op de user-input en alle options die niet overeenkomen te verplaatsen naar een onzichtbare list (en terug) zodat effectief je een instant zoekresultaat krijgt soortgelijk aan google auto-suggest.
Ik heb de code werkend echter de performance in Internet Explorer 6/win is nog onvoldoende, Firefox en Opera zijn 3-5x sneller. Het doorzoeken van delange select-list is de oorzaak, ik wil dus de loop zo snel mogelijk maken. (de pagina komt op een intern netwerk dus andere browsers hoeven nu niet ondersteund te worden).
Echter verder dan het onderstaande kan ik niet komen omdat ik onvoldoende javascript ervaring heb, en geen programmeer achtergrond.
Live test-pagina
Ik heb de code werkend echter de performance in Internet Explorer 6/win is nog onvoldoende, Firefox en Opera zijn 3-5x sneller. Het doorzoeken van delange select-list is de oorzaak, ik wil dus de loop zo snel mogelijk maken. (de pagina komt op een intern netwerk dus andere browsers hoeven nu niet ondersteund te worden).
Echter verder dan het onderstaande kan ik niet komen omdat ik onvoldoende javascript ervaring heb, en geen programmeer achtergrond.
Live test-pagina
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| function autoComplete(field, srcSelectId, property, forcematch, dstSelectId) { var firstIndex=null; //shortcuts var srcSelectOpt = document.getElementById(srcSelectId).getElementsByTagName('option'); var dstSelectOpt = document.getElementById(dstSelectId).getElementsByTagName('option'); //shortcuts for speedup var theInput = field.value.toUpperCase(); var srcSelectOpt = document.getElementById(srcSelectId).getElementsByTagName('option'); var dstSelectOpt = document.getElementById(dstSelectId).getElementsByTagName('option'); var dstLength = dstSelectOpt.length; document.getElementById(srcSelectId).style.display = "none"; //loop through templist for(var i = 0;i < dstLength;i++) { //IF user input is part of dstSelectId option if(dstSelectOpt[i][property].toUpperCase().indexOf(theInput) != -1){ // move them back to srcSelectId list trash = document.getElementById(dstSelectId).removeChild(dstSelectOpt[i]); document.getElementById(srcSelectId).appendChild(trash); dstLength = dstSelectOpt.length; i--; } } document.getElementById(srcSelectId).style.display = "block"; var srcLength = srcSelectOpt.length; var srcSelectOpt = document.getElementById(srcSelectId).getElementsByTagName('option'); var dstSelectOpt = document.getElementById(dstSelectId).getElementsByTagName('option'); var srcLength = srcSelectOpt.length; document.getElementById(srcSelectId).style.display = "none"; //loop through mainlist for(var i = 0;i < srcLength;i++) { //IF user input is NOT part of srcSelectId option if(srcSelectOpt[i][property].toUpperCase().indexOf(theInput) == -1){ // move them to dstSelectId list trash = document.getElementById(srcSelectId).removeChild(srcSelectOpt[i]); document.getElementById(dstSelectId).appendChild(trash); srcLength = srcSelectOpt.length; i--; } } document.getElementById(srcSelectId).style.display = "block"; var srcLength = srcSelectOpt.length; } |
HTML:
1
2
3
4
5
6
7
8
9
10
11
| <form id="UnitSelect" name="UnitSelect" method="POST"> <select name="temp2" id="temp2" style="display:none"></select> <strong style="color:#fff">Search list: </strong> <input name="input2" value="" onkeyup="autoComplete(this,'D1','text',true,'temp2')" type="text"><span style="color:#fff">or select from the list below (list is affected by input):</span><br> <select name="D1" id="D1" size="10" style="width:70%;"> <option value="DE3535|2D Digital Imaging and Animation">2D Digital Imaging and Animation (DE3535)</option> </select><input type="submit" value=" GO " name="doSubmit2" onClick="UnitScript('UnitSelect','D1');"> </form> |
[ Voor 37% gewijzigd door Justice op 14-03-2005 10:30 . Reden: overbodig commentaar verwijderd ]
Human Bobby