Js onChange event probléma
Sziasztok
Nem nagyon találok megoldást egy olyan problémára, hogy adott három input mező (text típusúak). Az első kettő változásakor a harmadik mező értéke az első kettő összege kell, hogy legyen - ez eddig megy is tökéletsen.
Viszont ilyenkor szükségem lenne arra, hogy az összeg mező onChange metódusa lefusson, mert ez a mező is részösszege egy "subtotal" mezőnek és annak is változnia kéne.
Tehát tulajdonképpen amikor js-ből változtatom a harmadik mező értékét, akkor ott kéne dobni egy hívást a mező onChange eseménykezelőjének, de nem jövök rá, hogy hogyan... ;((
Bocs, ha kicsit összecsapott voltam, de már keresem egy ideje a megoldást.
köszi,
Halee
■ Nem nagyon találok megoldást egy olyan problémára, hogy adott három input mező (text típusúak). Az első kettő változásakor a harmadik mező értéke az első kettő összege kell, hogy legyen - ez eddig megy is tökéletsen.
Viszont ilyenkor szükségem lenne arra, hogy az összeg mező onChange metódusa lefusson, mert ez a mező is részösszege egy "subtotal" mezőnek és annak is változnia kéne.
Tehát tulajdonképpen amikor js-ből változtatom a harmadik mező értékét, akkor ott kéne dobni egy hívást a mező onChange eseménykezelőjének, de nem jövök rá, hogy hogyan... ;((
Bocs, ha kicsit összecsapott voltam, de már keresem egy ideje a megoldást.
köszi,
Halee
Hívd meg!
Abból a rutinból ami összeadja az első kettőt, hívd meg a subtotal rutinodat!
Tételezzük fel a három beviteli meződet így:
Egy függvény
Más: az onkeypress talán alkalmasabb lenne (végső esetben setTimeoute-al kombinálva), mert az onchange (legjobb tudsom szerint) csak a fókusz elvesztésekor fut le, tehát 90%ban helytelen adatokat lát a képernyőn a felhazsnáló.
onKeyPress-t megnézem
az onKeyPress jó ötlet és valószínű alkalmazni is fogom, csak az sem oldja meg az a problémát, hogy ha a total1 változik, akkor a subtotal is változzon.
üdv,
Halee
namégegyszer
Ez is lehet megoldás
Amit írsz az jó, sőt lehet, hogy ez lesz a megoldás. Viszont amivel én most próbálkozom az a kövezkező
<input type="text" name="adat" value="" onChange="Szamolj(this.name,'total1');" />
<input type="text" name="adatsum" id="total1" value="" onChange="Szamolj(this.name,'nagytotal');" />
...
<input type="text" name="adatsum" id="total2" value="" onChange="Szamolj(this.name,'nagytotal');" />
...
<input type="text" name="adatsum" id="nagytotal" value=""/>
és a Js meg valami hasonló:
var c = document.getElementsByName(elemNev);
var ossz=parseInt(0);
for (var i = 0; i < c.length; i++) {
ossz=parseInt(ossz)+parseInt(c[i].value);
}
document.getElementById(total).value=ossz;
// ...és itt kéne valami ilyen ez persze nem működik ahogy írom
document.getElementById(total).onChange();
// ...
}
Bocs, ha van hiba a kódban, most csak gyorsan begépeltem valami hasonlót. Szóval a lényeg, hogy nekem a konkrét mező onChange metódusát kéne meghívnom a paraméterek miatt... ;((
üdv,
Halee
onchange(), createEvent()
Egyszerű mód:
Bizonyos esetekben jobb megoldás saját esemény kreálása:
myEvent.initEvent('change', true, false);
document.getElementById('osszeg').dispatchEvent(myEvent);
Így működik akkor is ha
addEventListener
-rel csatoltál pl. akár több eseménykezelőt is. Explorer-hez Google:fireEvent
vagycreateEventObject
.példa egyszerűre
jav: és refaktorizálás után :))
Köszi
Köszi a választ, valószínű, hogy hasonló lesz a megoldás...
üdv,
Halee
Még egy probléma
Toxin megoldásához hasonlót próbálok alkalmazni, viszont egy újabb problémába ütköztem. Amikor egy mező értéke változik tehát onChange fgv lefut, akkor több számolást is kéne egyszerre végeznem, tehát több különböző paraméterű onLinkedChange fgv-t kéne futtatnom.
Eddig nem igazán sikerült erre megoldást találni (próbáltam egy fgv-t definiálni és abból meghívni, de akkor meg mintha az event-t nem kapná meg a onLinkedChange)... ;(
köszi,
Halee
De mostmár tényleg...
...
- Mert úgy működik a form, hogy ha egy input text elől kiveszel egy jelölő négyzetet, akkor annak változása nem befolyásolhatja többé a form többi mezőjét (akkor sem, ha egy másik érték számításához erre a mezőre szükség lenne) és ez eléggé megbonyolítaná az egy fgv-ben való kezelést, mivel egy kb 120-130 mezős formról van szó.
- Mert jobban tetszik ez a megoldás... ;))
Egyébként egy dolgon már elgondolkoztam, ha már egy függvényes megoldás lesz, akkor az bizony meg át szerver-oldalra és akkor csak a tényleges felhasználói input mezők lesznek a képernyőn, de a második pontban leírt problémát akkor is fel kell majd oldani valahogy...
üdv,
Halee
ciklus?
A pipás dolgot nem értem, de ha módosítasz egy másik mezőt ami szintén befolyásolja a pipás összegét, akkor szükséged van a pipás mező eredeti értékére, amit tárolsz valahol. Vagy ha nem kell résztvennie ez összegben, akkor meg semmilyen pluszmunkát nem jelent (csak egy IF-et).
De ahogy gondolod..