Selailin noita ohjeita mutta en löydä funktiota joka muuttaisi tekstijonon numeroksi eli basic.in VAL käskyä vastaava. Tämä sen takia kun epäilen että kun luetaan tekstiruudusta arvo muuttujaan ja tulostetaan se vaikka suoraan tulee ilmoitus "undefined", vai onko tässä jotakin muita matoja:
<script type="text/javascript"> document.write("Scripti toimii "); document.write(p11); var p11 = document.Yazzy.p11.value; var p12 = document.Yazzy.p12.value; var p13 = document.Yazzy.p13.value; var p14 = document.Yazzy.p14.value; var p15 = document.Yazzy.p15.value; var p16 = document.Yazzy.p16.value; var summa1p1 function laske() { summa1p1= p11+p12+p13+p14+p15+p16; document.Yazzy.P1y1.value = 63; } </script> </BODY> <table style="width: 100%"> <tr> <td> <form name="Yazzy"> <table style="width: 182px"> <tbody> <tr class="P1"> <td style="width: 27px; height: 26px;">Nimi</td> <td style="width: 27px; height: 26px;"> <input class="P1" id="P1" type="textbox" style="width: 60px"></td> /// JNE....
lisäsin tuon parseint() funktion mutta ei auttanut tuohon "undefined" ilmoitukseen. Jotain vikaa on muuttujussa, ei taida vanha koira oppia enää uusia kieliä. Tuo 63 tulostuu tekstiruutuun oikein mutta jos korvaan sen tuolla muuttujalla summa1p1 tulee tulokseksi NaN.
Laita kaikki nuo muuttujasi laske-funktion sisään. Tietenkään p11 ei sisällä mitään tuolla document.write-rivillä, joka on ennen muuttujan asettamista. Myöskään ei auta asettaa muuttujaa tuossa kohti, koska skripti ajetaan juuri tuossa kohti sivua, jolloin koko Yazzy-lomaketta ei vielä edes ole.
Unohda document.write, sille ei ole sijaa nykyaikaisessa JS-ohjelmoinnissa. Dubuggaukseen sopii console.log, jonka tuloste näkyy selaimen kehitystyökaluissa.
Sanokaahan viisaat miksi tämä ei toimi, jokin tässä ei ole oikein enkä itse sitä keksi, aloin harjoituksen vuoksi väsätä Yazzy peliä mutta tein tuohon pari muutosta ja se lopetti toimimisen.
<script type="text/javascript"> function laske() { var pw11 = parseInt(document.Yazzy.p11.value); var pw12 = parseInt(document.Yazzy.p12.value); var pw13 = parseInt(document.Yazzy.p13.value); var pw14 = parseInt(document.Yazzy.p14.value); var pw15 = parseInt(document.Yazzy.p15.value); var pw16 = parseInt(document.Yazzy.p16.value); var summa1p1; var p1b; var pw11p = parseInt(document.Yazzy.p11p.value); var pw12p = parseInt(document.Yazzy.p12p.value); var pw1ks = parseInt(document.Yazzy.p1ks.value); var pw1ns = parseInt(document.Yazzy.p1ns.value); var pw1ps = parseInt(document.Yazzy.p1ps.value); var pw1is = parseInt(document.Yazzy.p1is.value); var pw1mo = parseInt(document.Yazzy.p1mo.value); var pw1s = parseInt(document.Yazzy.p1s.value); var pw1y = parseInt(document.Yazzy.p1y.value); var sup1; summa1p1 = pw11+pw12+pw13+pw14+pw15+pw16; document.Yazzy.P1y1.value = summa1p1; if (summa1p1 > 62) { document.Yazzy.P1b.value=50; } else if(summa1p1 < 63) { document.Yazzy.p1b.value=0; } sup1 = summa1p1+p1b+pw11p+pw12p+pw1ks+pw1ns+pw1ps+pw1is+pw1mo+pw1s+pw1y; document.Yazzy.P1ky.value = sup1; document.write("Scripti toimii"); } </script>
Uncaught TypeError: Cannot set property 'value' of undefined rivillä 145
Sivulla ei ole sellaista kenttää kuin P1y1, vaan p1y1 ... Ja samoin muutamassa muussa kohti p kirjoitettu isolla.
Lisäksi tuossa on mielestäni sellainen tyhmyys, että kaikkiin kenttiin täytyy syöttää luku, tai se antaa summaksi NaN
Kannattaa opetella käyttämään selaimen kehittäjäkonsolia (esim. Chromessa ctrl+alt+j), niin näkee suoraan nuo virheet ja mitkä arvot muuttujat saa yms.
Oletin että Parseint muuttaa tyhjän kentän arviksi 0 se ei sitä oletettavasti tee.
Eikö tämän pitäisi hoitaa tuon tyhjän kentän syndrooma eli muuttaa tyhjä nollaksi?
if (pw11 == "") { pw11 = 0; }
en saa sitä kumminkaan toimimaan.
Grez kirjoitti:
Kannattaa opetella käyttämään selaimen kehittäjäkonsolia (esim. Chromessa ctrl+alt+j), niin näkee suoraan nuo virheet ja mitkä arvot muuttujat saa yms.
En löydä tuota kohtaa missä näkee muuttujien arvot, tuota ominaisuutta olen kaivannut.
Kun teksti ei muutu luvuksi, parseInt palauttaa arvon NaN (not a number). Nollan saa tästä helpoiten merkinnällä ”|| 0” eli esimerkiksi näin:
var a = parseInt("heppa") || 0; // a = NaN || 0; // Koska NaN tulkitaan tai-operaatiossa (||-operaatiossa) epätodeksi, // operaatio palauttaa jälkimmäisen arvon eli nollan.
heikkju2 kirjoitti:
En löydä tuota kohtaa missä näkee muuttujien arvot, tuota ominaisuutta olen kaivannut.
Täytyy ymmärtää, että paikallisilla muuttujilla ei ole arvoja ennen koodin suoritusta eikä koodin suorituksen jälkeen, vaan arvoja voi katsoa vain suorituksen aikana. Sitä varten pitää laittaa koodiin pysäytyspiste eli breakpoint. Myös virhetilanteissa koodi ehkä pysähtyy katselua varten.
Kannattaa koettaa etsiä ohjeita netistä.
Kiitos tästä.
Grez kirjoitti:
Kannattaa opetella käyttämään selaimen kehittäjäkonsolia (esim. Chromessa ctrl+alt+j), niin näkee suoraan nuo virheet ja mitkä arvot muuttujat saa yms.
Eiköhän tuo kuitenkin ole Ctrl+shift+j, tai F12 + console valinta.
arvoja voit tutkia sourcen kautta asettamalla breakpointin oikeaan kohtaan javascript koodiasi (kohtaan jossa ko. muuttuja on käytettävissä), ja lisäät muuttujasi watch -listaan. Vaihtoehtoisesesti voit käyttää console näkymää, ja kutsua funktioitasi, ja katsella muuttujien arvoja (samalla periaatteella, luonnollisesti breakpoint pitää asettaa source puolella oikeaan kohtaan koodia, missä muuttujat ovat käytettävissä). Breakpointin triggauksen jälkeen pääset siirtymään eteenpäin seuraavalle riville painamalla F10, tai watch -osion yläpuolella olevasta työkaluvalikosta Step over.. painiketta painamalla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.