Már többen is szóltak, hogy Internet Explorer - első sorban 6-os és 7-es széria - alól nem akaródzik a szavazásnak rendesen működni. Megjelennek a csillagok, a kurzor kinézete is a linkeknél ismert módon megváltozik, de kattintáskor az ég adta világon semmi nem történik.
Megnéztem IE 5-ös, 6-os és 7-es, valamint Firefox és Opera böngészőkkel is. Egyedül IE 7 alatt tapasztaltam a hibát. Lehet, hogy a 6-os verziójú IE régebbi változat, mint a problémát tapasztaló felhasználóé volt és az enyémben még nem jelent meg ez a hiba. Gondolom valami patch tolta el a szekeret.
Az IE 7 jobban szereti az XHTML-t, mint a HTML 4-et, főleg mert a web 8.0-ra hajaz. :) Ezért a lustán megírt HTML kimenetet átírtam teljesen XHTML 1.0 szerintire. És ekkor jött a megvilágosodás, amit addig nem értettem.
Az XHTML szigorú szabvány és könnyen elvérezhet rajta az ember, már egy elmaradt alt, title miatt is. Nekiugrottam a W3C validatornak és tökéletesre csiszoltam a forrást.
Ekkor jöttem rá, hogy a validator mindig kiakad a javascripten és az ott leledző "<" jelet az XML proci mindig tag nyitásnak értékeli. Ettől megdöglik a HEAD, BODY, néhány DIV és persze a szavazáshoz szükséges linkek is. Mert végig keresi kódban annak a nyamvadt megnyitásnak a lezárását.
Persze lezárhattam volna egy kamura elejtett ">" jellel, de az nem túl elegnáns. Ehelyett a régen elfeledett megoldáshoz nyúltam. és nem kellett csalódnom.
A problémát okozó kódrészlet így nézett ki (az érdektelen részeket kivettem belőle):
<script type="text/javascript" language="javascript">
var orig = Array();
var i;
function overtrick(tp,n){
for(i=1;i<=n;i++) {
var x = tp+''+i;
imlayer = document.getElementById(x);
orig[x] = imlayer.src;
imlayer.src = 'rateh.gif';
}
}
function outtrick(tp,n){
for(i=1;i<=n;i++) {
var x = tp+''+i;
imlayer = document.getElementById(x);
imlayer.src = orig[x];
}
}
</script>
A sárgával jelölt sorokban látható "<" jel volt a ludas. Ezek miatt két megnyitott tag is ott lebegett a semmiben. Pedig a kód és az oldal forrása is hibátlan volt. Nem is kellett igazából sokat módosítani rajta.
<script type="text/javascript" language="javascript">
//<![CDATA[
var orig = Array();
var i;
function overtrick(tp,n){
for(i=1;i<=n;i++) {
var x = tp+''+i;
imlayer = document.getElementById(x);
orig[x] = imlayer.src;
imlayer.src = 'im/rateh.gif';
}
}
function outtrick(tp,n){
for(i=1;i<=n;i++) {
var x = tp+''+i;
imlayer = document.getElementById(x);
imlayer.src = orig[x];
}
}
//]]>
</script>
Ez az egyszerű módosítás meg is oldotta a problémát. A CDATA-n belül helyet foglaló részeket az XML értelmező normál szövegként értékeli és nem értelmezi a benne található megjegyzéseket, utasításokat, stb.