"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."
Intentionally left blank
Ik ben nooit zo'n fan van dit soort contructies waar alle methodes achter elkaar aangeroepen worden, ik plaats er altijd haakjes omheen zodat ze 1 voor 1 uitgevoerd worden. Volgens mij werkt dat ook minder foutgevoelig:Reveller schreef op vrijdag 10 december 2004 @ 23:39:
- door de toevoeging van .toLowerCase() aan het scriptje, worden de spaties niet meer vervangen door underscores. Waarom niet?
1
| (((document.getElementById('title').value).replace(/[^a-z0-9 ]/ig,'')).replace(/ /g, '_')).toLowerCase(); |
Door met het onkeydown event te checken welke toets ingedrukt word, en als het een 'verkeerde' is kun je het event cancellen waardoor de letter niet op het scherm komt.
- hoe kan ik het invoeren van niet-alafabetische of numerieke waardenin de "url" input negeren?
[ Voor 27% gewijzigd door André op 11-12-2004 10:33 ]
Dat is natuurlijk dikke onzinAndré:
Ik ben nooit zo'n fan van dit soort contructies waar alle methodes achter elkaar aangeroepen worden, ik plaats er altijd haakjes omheen zodat ze 1 voor 1 uitgevoerd worden. Volgens mij werkt dat ook minder foutgevoelig.
1
2
3
4
5
6
7
8
9
10
| document.getElementById ( 'title' ).value = document.getElementById ( 'title' ).value .replace ( /[^a-z0-9 ]/ig,'' ) .replace ( / /g, '_' ) .toLowerCase(); // of var obj = document.getElementById ( 'title' ); obj.value = obj.value.replace ( /[^a-z0-9 ]/ig,'' ); obj.value = obj.value.replace ( / /g, '_' ); obj.value = obj.value.toLowerCase (); |
Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

De werking in het kort:
- in de linker selectbox staan de pagina's van de website in boomstructuur
- rechts staat van elke pagina de alias
- als je links een pagina selecteert, wordt de bijbehorende alias rechts geselecteerd. Vervolgens wordt de URL voor de onderste input box gezet
- de gebruiker kan nu een titel voor een nieuwe pagina intikken. Automatisch wordt in de onderste input box de alias gevormd. Ik maak hier de pagina http://site.com/over_ons/wij/ted_raket aan.

Deze oplossing zorgt alleen voor twee problemen:
- ik moet bij elke option ontzettend veel  's gebruiken om te indenten tussen de pagina titels en aliases
- ik ben bang dat mijn huidige scriptjes niet meer voldoen
- Zou jij voor 1 of 2 option lists kiezen of een geheel andere oplossing?
- Heb je enig idee in hoeverre ik de javascript zal moeten aanpassen of opnieuw bouwen?
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| <script> function alias() { var alias = document.getElementById('title').value; alias = alias.replace(/[^a-z0-9 ]/ig,''); alias = alias.replace(/ /g, '_'); alias = alias.toLowerCase() document.getElementById('alias').value = alias; } function chars() { var alias = document.getElementById('alias').value; alias = alias.replace(/[^a-z0-9_]/ig,''); alias = alias.replace(/ /g, '_'); alias = alias.toLowerCase() document.getElementById('alias').value = alias; } function selectAlias(o) { var i = o.selectedIndex; document.getElementById('aliasList').options[i].selected = true; getPath(document.getElementById('aliasList')); } function selectTitle(o) { var i = o.selectedIndex; document.getElementById('titleList').options[i].selected = true; } function getPath(o) { var i = o.selectedIndex + 1; var aRet = new Array(); var iNumT = null; while (i--) { var sHTML = o.options[i].innerHTML; sText = sHTML.replace( /\ /g, " " ); var t = 0; while (sText.charCodeAt(t) == 32) t++; if (iNumT == null) { iNumT = t - 2; aRet.unshift(sText.substr(t)); continue; } if (t == iNumT) { iNumT = iNumT - 2; aRet.unshift(sText.substr(t)); if (t == 0) break; } } var sRet = ""; for (var i = 0; i < aRet.length; i++) if (aRet[i] == 'Home') sRet += 'http://localhost/'; else sRet += aRet[i]+"/"; document.getElementById('url').innerHTML = sRet; } </script> |
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
| <table> <tr> <td valign="top">Titel: </td> <td> <select size="10" name="titleList" id="titleList" onchange="selectAlias(this);"> <option value="1">Home</option> <option value="2"> Over Ons</option> <option value="5"> Management Team</option> <option value="6"> Stervelingen</option> <option value="3"> contact</option> </select> </td> <td valign="top">Alias: </td> <td> <select size="10" name="aliaslist" id="aliaslist" onchange="getPath(this); selectTitle(this);"> <option value="1">http://site.com</option> <option value="2"> over_ons</option> <option value="5"> management</option> <option value="6"> wij</option> <option value="3"> contact</option> </select> </td> </tr> </table> <br> <br> <table> <tr> <td>Titel:</td> <td><input type="text" name="title" id="title" size="30" onkeyup="alias();"></td> </tr> <tr> <td>URL: <span id="url"></span></td> <td><input type="text" name="alias" id="alias" size="30" onkeyup="chars();"></td> </tr> </table> |
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."
Wat je presenteert in de option lists zijn dingen die een relatie hebben, maar ook wel weer redelijk los van elkaar staan. Zelf zou ik hier voor 2 option lists kiezen, omdat ik dit overzichtelijker vind dan 1 option list.Zou jij voor 1 of 2 option lists kiezen of een geheel andere oplossing?
Ik heb wel een aanmerking op je functies alias() en chars(). Deze voren vrijwel dezelfde code uit. Is beetje onnodig vind ik. Je zou het ook zo kunnen doen:
1
2
3
4
5
6
7
8
9
| function setInput(o) { var alias = document.getElementById(o.id).value; alias = alias.replace(/[^a-z0-9 ]/ig,''); alias = alias.replace(/ /g, '_'); alias = alias.toLowerCase(); document.getElementById('alias').value = alias; } |
en bij je input elementen deze fuctie als: "setInput(this);" aanroepen.
"In theory, there is no difference between theory and practice. But, in practice, there is."