Met opera (MSIE en FF werken prima) loop ik tegen een probleempje aan; wanneer ik een select met options aanmaak via de DOM en daarna de value van de select zet, werkt dit niet. Het lijkt alsof hij ondertussen nog bezig is de DOM tree te parsen, want als ik alert of een sleep doe, werkt het wel. zie dit voorbeeld (regel 18 zet de value van de select):
Wanneer je van dit voorbeeld de regel 17: sleep(500) uitcommentarieerd, werkt de value setting niet in opera. Iemand een idee waarom? deze sleep functie werkt nu wel, maar is niet helemaal foolproof. bovendien zou het op een trager systeem langer kunnen duren. Het is me ook niet gelukt om de status van de select uit te lezen om zo wachten tot het maken klaar is.
code:
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
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>DOM TEST</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
function test() {
select=document.createElement('select');
document.getElementById('start').appendChild(select);
select.appendChild(createOption('test1','test1'));
select.appendChild(createOption('test2','test2'));
select.appendChild(createOption('test3','test3'));
select.appendChild(createOption('test4','test4'));
select.appendChild(createOption('test5','test5'));
select.appendChild(createOption('test6','test6'));
select.appendChild(createOption('test7','test7'));
sleep(500);
select.value='test7';
}
function createOption(value,name) {
op=document.createElement('option');
op.setAttribute('value',value);
op.appendChild(document.createTextNode(name));
return op;
}
function sleep(msec) {
var d = new Date();
var starttime = (d.getMilliseconds()+(d.getSeconds()*1000));
while (true) {
var dd = new Date();
if ((dd.getMilliseconds()+(dd.getSeconds()*1000))>(starttime+msec))
break;
}
return;
}
</script>
</head>
<body onload="test()">
<div id="start">
</div>
</body>
</html> |
Wanneer je van dit voorbeeld de regel 17: sleep(500) uitcommentarieerd, werkt de value setting niet in opera. Iemand een idee waarom? deze sleep functie werkt nu wel, maar is niet helemaal foolproof. bovendien zou het op een trager systeem langer kunnen duren. Het is me ook niet gelukt om de status van de select uit te lezen om zo wachten tot het maken klaar is.