Sziasztok!
Előre bocsátom, hogy nem vagyok egy JS haxor, mivel nincs szükségem nagy és bonyolultnak mondható kódok írására.
Eddig felmerült problémáimat ennek megfelelően google+experimenting módon sikerült megoldani. Azonban most kissé
megakadtam és kb. 1 hete nem jutok dűlőre az alább vázolt problémával.
Adott egy form, melyen text típusú input mezők leledzenek. Ezen mezőkbe a felhasználó egész számokat ír (ennek
ellenőrzését js-ből, illetve php-ból végzem). A mezők egy-egy fő "probléma" alábontását tartalmazzák. Ennek
megfelelően, a "probléma" számszerű értékét a részek összegeként állítom elő, hogy a felhasználónak evvel ne
kelljen foglalatoskodni. A művelet elvégzésére írtam egy összegző fv-t, ami a megadott bemeneti mezőkből kiolvassa
a számokat, majd a megadott kimeneti mezőbe kiírja az összeget. Namost, ezeket az eljárásokat az input-ok
onChange eseményére hívom. A probléma, hogy míg FF alatt onChange-re korrektül számol a kis taknyolmány,
addig IE 6 és 7-ben a francért sem akar működni a dolog. Sokat google-oztam, kipróbáltam az onBlur-tól az onKey*-on át
minden eseményt, setTimeout fv-t, de semmi eredmény (Míg mondjuk egy select onchange eseményére hívva működik).
Szeretném kérdezni, hogy az alább vázolt kódot milyen módosítással lehetne rábírni arra,
hogy IE alatt is korrektül tegye a dolgát? (Megjegyzendő, hogy ha az alábbi kód calc(mezok, eredmeny) fv-ét a megfelelő input mezők onchange
eseményére közvetlenül hívom, akkor IE alatt is működik. Ez azonban nem "elegáns" megoldás, tekintve, hogy több oldalas adatlapokról van szó,
ahol egy-egy összeg akár 10-15 mező összege is lehet, így pl. egy későbbi módosítás meglehetősen fájdalmas lenne a későbbi
karbantartónak.)
A JS a head-ben elhelyezve:
<script language="JavaScript" type="text/javascript">
function calc(mezok, eredmeny)
{
var osszeg = 0;
for(i=0; i != mezok.length; i++)
{
var novekmeny = 0;
if( isNaN(parseInt(document.getElementById(mezok[i]).value)) )
{
novekmeny = 0;
} else {
novekmeny = parseInt(document.getElementById(mezok[i]).value);
}
osszeg += novekmeny;
}
document.getElementById(eredmeny).innerHTML = osszeg.toString();
}
function recalc()
{
calc( new Array('uj_gege', 'uj_szajureg', 'uj_garat'), 'uj_tumoros_osszesen');
}
</script>
Részlet a form kódjából:
<label>Újonnan felfedezett tumorosok száma összesen: </label><a id="uj_tumoros_osszesen"></a>
<label for="uj_gege">• gége: </label><input type="text" id="uj_gege" name="uj_gege" size="10" maxlength="9" onchange="recalc();">
<label for="uj_garat">• garat: </label><input type="text" id="uj_garat" name="uj_garat" size="10" maxlength="9" onchange="recalc();">
<label for="uj_szajureg">• szájüreg: </label><input type="text" id="uj_szajureg" name="uj_szajureg" size="10" maxlength="9" onchange="recalc();">
Minden építő jellegű hozzászólást hálásan köszönök!