eli tuollaisessa formissa on select jutun kanssa ongelmia - Firefoxilla toimii, osaisko joku sanoa, että miks ei toimi IE:ssä?
var valitsev=document.getElementById("kampanjakesto") valitsev.onchange=function() { var valittuarvo=this.options[this.selectedIndex]; document.write(valittuarvo.value); //deguggaus rivi, heittää virheen, koska valittuarvo.value:ssa on jotain mätää paivitaTulosteet("kampanjakesto", valittuarvo.value); }
Lähtisin aluksi purkamaan sillä, että vaihtaisin document.writen johonkin muuhun. Helppona ratkaisuna kokeile vaikka alertia. document.write nostaa ainakin omalla kohdalla aina karvat pystyyn, mieluummin manipuloisin DOMin kautta tai käyttäisin innerHTML:ää.
Muoks!
jQuery-jutustelua aiheesta
Debuggauksen alkeet: tarkista funktion alussa kaikki arvot, ja laita koodi try-lohkoon.
var e; try { alert("this: " + this); alert("options: " + this.options); alert("index: " + this.selectedIndex); alert("options[i]: " + this.options[this.selectedIndex]); alert("options[i].value: " + this.options[this.selectedIndex].value); } catch (e) { alert(e); }
No pistinpä tuolta debuggausta jo tulostus laitto kaikkien arvoksi
[object] paitsi että toi selectedindex palautti numeron, niin kuin kuuluu.
Viimeinen rivi palautti tyhjää arvon.
Eli homma on muuten aivan kunnossa mutta option-tagin value-attribuutti on ilmeisesti tyhjä (tai puuttuu). Jatka samantapaista alert-debuggausta koodissa edemmäs, kunnes virhekohta löytyy.
Joo, olet oikeassa, mulla oli pelkästään <option>4</option>, eli value arvo puuttui. Nyt merkkasin näin: <option option value = '4' >4</option>
Ja homma toimii aina välillä! Eli esim. this.options[this.selectedIndex].value arvo löytyy, jos käytän tuota sun debuggaus riviä, mutta jos kutsun sitä ilman sun riviä, niin eipä enää löydykkään - hämärää.
var valitsev=document.getElementById("mainoskesto") valitsev.onchange=function() { //Jos laitan tähän tuon debuggaus rivin, niin homma toimii - ilman sitä ei toimi. var valittuarvo=this.options[this.selectedIndex].value; paivitaTulosteet("mainoskesto", valittuarvo.value); } function paivitaTulosteet(aihe, arvo) { //tulosteen alku ja lopputunnisteet: var tulos1 = "hinta: "; var tulos1loppu = "€"; var tulos2 = "kontaktiennuste: "; //päivita arvo scriptiin: if(aihe == "aloitusviikko"){aloitusviikko = arvo; alert("kutstuttu");} if(aihe == "kampanjakesto")kampanjakesto = arvo; if(aihe == "mainoskesto")mainoskesto = arvo; if(aihe == "taksilkm")taksilkm = arvo; //laske hinta var hinta = (kampanjakesto * perusmainos + (mainoskesto - 10)* hintapersek)*taksilkm; document.getElementById("tulos1").innerHTML = tulos1 + hinta + tulos1loppu; //laske kontakti ennuste: var kontakti = taksilkm * kontaktejapertaksi * kampanjakesto; document.getElementById("tulos2").innerHTML = tulos2 + kontakti; document.getElementById("tulos3").innerHTML = kampanjakesto; document.getElementById("tulos4").innerHTML = taksilkm; } EDIT: miten vois välttää tämän ainaisen selain riippuvuus jutun - ihan sama mitä tahansa tekee javascriptillä, niin ei voi sitte koskaan toimia ykkösellä toisilla selaimilla. Onko missään mitään ohjetta missä selitetään näitä Javascriptin vaara kohtia tai jotain, missä selitetään mitä tulee käyttää ja mitä ei. Täytyy kyllä sanoa, että monet ohjelmointikielet ja järjestelmät on viisaasti suunniteltu, mutta yks mikä kusee niin on Javascript(välillä se on niin ku ihan sekoa), HMTL ja CSS, mitkä ei vaan sitten yksinkertaisesti voi toimia kaikilla selaimilla samalla tavalla. Ja välillä tulosteet riippuu ihan tuurista, joskus toimii, joskus ei, C++ on siitä hieno, että se sentään osaa valittaa ja varoittaa, eikä päästä läpi mitään epäselkyyksiä.
Höps höps, pistä HTML kuntoon, ei näin:
<option option value = '4' >4</option>
vaan näin:
<option value="4">4</option>
Ylimääräiset välit ovat haitaksi erityisesti =-merkin molemmin puolin, koska HTML-standardin mukaan väli erottelee attribuutit toisistaan, paitsi jos väli on arvon merkkaavien lainausmerkkien sisällä. Selaimet toki yrittävät ymmärtää virheellistäkin koodia, mutta aina ei veikkaamalla tule voittoja.
(Mod. huom: viestejä voi poistaa muokkaussivulta itsekin.)
(Mun piti vaan tarkistaa yks asia nopeasti :D )
Joo, korjasin jo ei vieläkään virhe löydy - kyllä sitä aina välillä ihmettelee, että onpa kyllä vietätävän hämärää.
Mutta Kiitokset Merri jo neuvoista.
EDIT:
<form id = "syoteformi"> .... <br> kampanjan kesto: <br> <select id="kampanjakesto"> <option>valitse</option> <option value="4">4</option> <option value="6">6</option> <option value="8">8</option> <option value="10">10</option> <option value="12">12</option> </select> .... </form>
EDIT2:
Ei vaan sain sen toimimaan, virhe johtuu siitä, että ku alan korjailemaan niin korjaan päällekkäin ja kun virhe on saatu korjattua, niin olen tehnyt toisen virheen toiseen kohtaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.